Spaces:
Sleeping
Sleeping
from langchain_anthropic import ChatAnthropic | |
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.document_loaders.csv_loader import CSVLoader | |
import os | |
import pandas as pd | |
import numpy as np | |
from langchain.agents.agent_types import AgentType | |
from langchain_experimental.agents.agent_toolkits import create_csv_agent | |
import chainlit as cl | |
os.environ["ANTHROPIC_API_KEY"] = os.environ["ANTHROPIC_API_KEY"] | |
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", "ChatAnthropic": "Réponse de l'IA 🤖"} | |
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 du marché de l'emploi par formation, issues de France Travail.").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() | |
loader = CSVLoader(file_path="./public/FilesMarcheEmploi.csv", csv_args={"delimiter": ",", "fieldnames": ["Label", "Number"],},) | |
data = loader.load() | |
actions = [] | |
for j in range(0,len(data)): | |
datas = data[j].page_content | |
datasArray = datas.split(':') | |
label = datasArray[1].replace('Number','') | |
value = datasArray[2] | |
actions.append(cl.Action(name="selectRome", value=value, label=label),) | |
selectRome = await cl.AskActionMessage( | |
content="Sélectionnez une formation pour laquelle le COPILOT vous assistera :", | |
actions=actions, | |
).send() | |
if selectRome and selectRome.get("name") == "selectRome": | |
await cl.Message( | |
content=f"Vous pouvez utiliser le COPILOT pour répondre à vos questions sur : \"{selectRome.get('label')}\", Codes ROME : \"{selectRome.get('value')}\"", | |
).send() | |
selectRomes = selectRome.get('value') | |
agent = create_csv_agent( | |
ChatAnthropic(temperature=1,model_name="claude-3-opus-20240229"), | |
"https://cipen.univ-gustave-eiffel.fr/typo3conf/ext/cipen_package/Resources/Public/Dataviz/datalab/crossfilterings/EmploisRome/" + selectRomes[1:] + ".csv", | |
verbose=False, | |
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=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() |