Spaces:
Sleeping
Sleeping
from langchain_community.llms import HuggingFaceEndpoint | |
from langchain_core.prompts import PromptTemplate | |
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder | |
from langchain.memory import ChatMessageHistory, ConversationBufferMemory | |
from langchain.schema import StrOutputParser | |
from langchain.schema.runnable import Runnable, RunnablePassthrough, RunnableLambda | |
from langchain.schema.runnable.config import RunnableConfig | |
from langchain.schema import StrOutputParser | |
from langchain_community.document_loaders.csv_loader import CSVLoader | |
import os | |
import pandas as pd | |
import numpy as np | |
from langchain.agents import AgentExecutor | |
from langchain.agents.agent_types import AgentType | |
from langchain_experimental.agents.agent_toolkits import create_csv_agent | |
from deep_translator import GoogleTranslator | |
import chainlit as cl | |
def library(): | |
return "Exemple de requêtes sur les données de l'enquête.\n\nQ1 : Quels sont les équipements préférentiels des étudiant.e.s?\nQ2 : Quels sont les 3 outils numériques principaux de l'université pour le travail universitaire?\nQ3 : Quels sont les outils numériques de l'université préférés des étudiant.e.s?\nQ4 : Quels sont les réseaux sociaux préférés des étudiant.e.s?\nQ5 : Quels sont les outils numériques de l'université préférés des étudiant.e.s pour communiquer?\nQ6 : Quels sont les outils numériques de l'université préférés des étudiant.e.s pour le travail universitaire?\nQ7 : Quel est l'usage du mail de l'université?\nQ8 : Quel est l'usage de l'ENT de l'université?\nQ9 : Donne le pourcentage d'étudiant.e.s en licence3 qui utilise souvent Moodle?\nQ10 : Donne le pourcentage d'étudiant.e.s en licence1 qui utilise souvent le mail?\nQ11 : Donne le pourcentage d'étudiant.e.s en licence1 de la filière Sciences économiques qui utilise souvent le mail?\nQ12 : Pourquoi les étudiants utilisent WhatsApp?\nQ13 : Pourquoi les étudiants utilisent Discord?\nQ14 : Quels avantages représentent les outils numériques?\nQ15 : Quelles sont les principales difficultés?\nQ16 : Compare l'usage de l'ENT par rapport à l'usage de l'email." | |
def rename(orig_author: str): | |
rename_dict = {"AgentExecutor": "Agent conversationnel", "Error": "Réponse de l'assistant", "DatapccSkillStream": "Copilot", "load_memory_variables": "Historique de conversation 💬", "Retriever": "Agent conversationnel", "StuffDocumentsChain": "Chaîne de documents", "LLMChain": "Agent", "HuggingFaceEndpoint": "Réponse de Mistral AI 🤖"} | |
return rename_dict.get(orig_author, orig_author) | |
async def on_chat_start(): | |
await cl.Message(f"> Votre assistant conversationnel vous permet d'analyser les données de l'enquête sur les usages du numérique par les étudiant.e.s Licence").send() | |
listPrompts_name = f"Liste des requêtes" | |
prompt_elements = [] | |
prompt_elements.append( | |
cl.Text(content=library(), name=listPrompts_name) | |
) | |
await cl.Message(content="📚 Bibliothèque de questions : " + listPrompts_name, elements=prompt_elements).send() | |
await cl.Avatar( | |
name="You", | |
url="https://cipen.univ-gustave-eiffel.fr/typo3conf/ext/cipen_package/Resources/Public/Dataviz/datalab/Venus/logo-ofipe.jpg", | |
).send() | |
os.environ['HUGGINGFACEHUB_API_TOKEN'] = os.environ['HUGGINGFACEHUB_API_TOKEN'] | |
repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1" | |
llm = HuggingFaceEndpoint( | |
repo_id=repo_id, temperature=1.0 | |
) | |
agent = create_csv_agent( | |
llm, | |
"https://cipen.univ-gustave-eiffel.fr/typo3conf/ext/cipen_package/Resources/Public/Dataviz/datalab/crossfilterings/enquete-DClic-juin2022-dataviz-ord1.csv", | |
verbose=True, | |
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION | |
) | |
cl.user_session.set("runnable", agent) | |
async def on_message(message: cl.Message): | |
memory= cl.user_session.get("memory") | |
runnable = cl.user_session.get("runnable") # type: Runnable | |
cb = cl.AsyncLangchainCallbackHandler() | |
try: | |
res = await runnable.acall("Réponds en langue française à la question suivante :\n" + message.content + "\nDétaille la réponse en faisant une analyse complète.", callbacks=[cb]) | |
await cl.Message(author="COPILOT",content=GoogleTranslator(source='auto', target='fr').translate(res['output'])).send() | |
listPrompts_name = f"Liste des requêtes" | |
prompt_elements = [] | |
prompt_elements.append( | |
cl.Text(content=library(), name=listPrompts_name) | |
) | |
await cl.Message(content="📚 Bibliothèque de questions : " + listPrompts_name, elements=prompt_elements).send() | |
except ValueError as e: | |
res = str(e) | |
resArray = res.split(":") | |
ans = '' | |
if str(res).find('parsing') != -1: | |
for i in range(2,len(resArray)): | |
ans += resArray[i] | |
await cl.Message(author="COPILOT",content=ans.replace("`","")).send() | |
listPrompts_name = f"Liste des requêtes" | |
prompt_elements = [] | |
prompt_elements.append( | |
cl.Text(content=library(), name=listPrompts_name) | |
) | |
await cl.Message(content="📚 Bibliothèque de questions : " + listPrompts_name, elements=prompt_elements).send() | |
else: | |
await cl.Message(author="COPILOT",content="Reformulez votre requête, s'il vous plait 😃").send() |