Update main.py
Browse files
main.py
CHANGED
@@ -10,7 +10,9 @@ from langchain.schema.runnable.config import RunnableConfig
|
|
10 |
from langchain_community.embeddings import HuggingFaceEmbeddings
|
11 |
from langchain.chains import ConversationalRetrievalChain, create_extraction_chain
|
12 |
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
|
|
|
13 |
from langchain.chains import LLMChain
|
|
|
14 |
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
|
15 |
from langchain.schema import StrOutputParser
|
16 |
from langchain.chains.conversational_retrieval.prompts import CONDENSE_QUESTION_PROMPT
|
@@ -685,26 +687,38 @@ async def construction_NCS(romeListArray):
|
|
685 |
context = await contexte(romeListArray)
|
686 |
emploisST = cl.user_session.get("EmploiST")
|
687 |
### Anthropic Completion ###
|
688 |
-
|
689 |
structure = str(modele('Note de composante sectorielle'))
|
690 |
definitions = definition('activite') + ' ' + definition('competence')
|
691 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
692 |
Peux-tu créer une note sectorielle d'après le modèle de note sectorielle précédent en respectant ses parties : 2., 2.1, 2.1.1, 2.2, 2.2.1, 2.2.2, 2.2.3 et d'après le contexte en vous réferrant strictement aux données du contexte fixé? Réponse sous forme d'un texte généré d'après le modèle et le contexte en 5000 mots et en langue française absolument.
|
693 |
"""
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
702 |
await cl.sleep(2)
|
703 |
await cl.Message(
|
704 |
-
author="Datapcc : 🌐🌐🌐",content="Note de composante sectorielle de(s) code(s) ROME : " + romeListArray[0] + "\n\n" + completion_NCS
|
705 |
).send()
|
706 |
-
cl.user_session.set("NCS" + romeListArray[0], completion_NCS
|
707 |
-
cl.user_session.set("contextChatBot", context + "\n" + completion_NCS
|
708 |
await cl.sleep(2)
|
709 |
listEmplois_name = f"Liste des emplois"
|
710 |
text_elements = []
|
@@ -740,12 +754,12 @@ async def construction_NCS(romeListArray):
|
|
740 |
await cl.Message(author="Datapcc : 🌐🌐🌐",content="📚 Bibliothèque de prompts : " + listPrompts_name, elements=prompt_elements).send()
|
741 |
await cl.sleep(2)
|
742 |
actions = [
|
743 |
-
cl.Action(name="download", value=completion_NCS
|
744 |
]
|
745 |
await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la note", actions=actions).send()
|
746 |
await cl.sleep(2)
|
747 |
saves = [
|
748 |
-
cl.Action(name="saveToMemory", value=completion_NCS
|
749 |
]
|
750 |
await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la note", actions=saves).send()
|
751 |
await cl.sleep(2)
|
@@ -907,10 +921,13 @@ async def API_connexion(romeListArray):
|
|
907 |
|
908 |
@cl.step(type="llm")
|
909 |
async def IA():
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
|
|
|
|
|
|
914 |
|
915 |
|
916 |
@cl.on_settings_update
|
@@ -964,10 +981,18 @@ async def setup_agent(settings):
|
|
964 |
contextChat = cl.user_session.get("contextChatBot")
|
965 |
if not contextChat:
|
966 |
contextChat = "Il n'y a pas de contexte."
|
967 |
-
|
968 |
-
|
969 |
-
|
|
|
|
|
|
|
970 |
)
|
|
|
|
|
|
|
|
|
|
|
971 |
memory = cl.user_session.get("memory")
|
972 |
prompt = ChatPromptTemplate.from_messages(
|
973 |
[
|
@@ -1000,7 +1025,7 @@ async def main(message: cl.Message):
|
|
1000 |
msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
|
1001 |
text_elements = []
|
1002 |
answer = []
|
1003 |
-
async for chunk in runnable.
|
1004 |
{"question": message.content},
|
1005 |
config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)]),
|
1006 |
#config=RunnableConfig(callbacks=[cl.LangchainCallbackHandler()]),
|
|
|
10 |
from langchain_community.embeddings import HuggingFaceEmbeddings
|
11 |
from langchain.chains import ConversationalRetrievalChain, create_extraction_chain
|
12 |
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
|
13 |
+
from langchain_community.llms import HuggingFaceEndpoint
|
14 |
from langchain.chains import LLMChain
|
15 |
+
from langchain_core.prompts import PromptTemplate
|
16 |
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
|
17 |
from langchain.schema import StrOutputParser
|
18 |
from langchain.chains.conversational_retrieval.prompts import CONDENSE_QUESTION_PROMPT
|
|
|
687 |
context = await contexte(romeListArray)
|
688 |
emploisST = cl.user_session.get("EmploiST")
|
689 |
### Anthropic Completion ###
|
690 |
+
client_llm = await IA()
|
691 |
structure = str(modele('Note de composante sectorielle'))
|
692 |
definitions = definition('activite') + ' ' + definition('competence')
|
693 |
+
template = """<s>[INST] Vous êtes un spécialiste du marché de l'emploi en fonction du niveau de qualification, des compétences professionnelles, des compétences transversales, du salaire et de l'expérience. Vous êtes doué pour faire des analyses du système travail sur les métiers les plus demandés grâce à votre aptitude à synthétiser les informations en fonction des critères définis ci-avant.
|
694 |
+
|
695 |
+
En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez à la question ci-dessous à partir du contexte ci-dessous :
|
696 |
+
{context}
|
697 |
+
{question} [/INST] </s>
|
698 |
+
"""
|
699 |
+
question_p ="""
|
700 |
Peux-tu créer une note sectorielle d'après le modèle de note sectorielle précédent en respectant ses parties : 2., 2.1, 2.1.1, 2.2, 2.2.1, 2.2.2, 2.2.3 et d'après le contexte en vous réferrant strictement aux données du contexte fixé? Réponse sous forme d'un texte généré d'après le modèle et le contexte en 5000 mots et en langue française absolument.
|
701 |
"""
|
702 |
+
context_p = f"Contexte : {context}. {definitions} Modèle de note sectorielle : {structure}. Réponds en langue française strictement à la question suivante en respectant strictement les données du contexte. Si vous ne pouvez pas répondre à la question sur la base des informations, dites que vous ne trouvez pas de réponse ou que vous ne parvenez pas à trouver de réponse. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Ne générez pas de réponses non pertinentes. Si les informations du contexte sont insuffisantes, procédez à une projection sur le secteur, les entreprises et le marché de l'emploi, pour construire la note de composante sectorielle."
|
703 |
+
prompt = PromptTemplate(template=template, input_variables=["question","context"])
|
704 |
+
llm_chain = LLMChain(prompt=prompt, llm=client_llm)
|
705 |
+
completion_NCS = llm_chain.run({"question":question_p,"context":context_p}, callbacks=[StreamingStdOutCallbackHandler()])
|
706 |
+
|
707 |
+
|
708 |
+
#completion_NCS = client_anthropic.messages.create(
|
709 |
+
# model="claude-3-opus-20240229",
|
710 |
+
# max_tokens=4000,
|
711 |
+
# temperature=1,
|
712 |
+
# messages=[{
|
713 |
+
# "role": 'user', "content": f"Contexte : Vous êtes un spécialiste du marché de l'emploi en fonction du niveau de qualification, des compétences professionnelles, des compétences transversales, du salaire et de l'expérience. Vous êtes doué pour faire des analyses du système travail sur les métiers les plus demandés grâce à votre aptitude à synthétiser les informations en fonction des critères définis ci-avant. En fonction des informations suivantes et du contexte suivant seulement et strictement. Contexte : {context}. {definitions} Modèle de note sectorielle : {structure}. Réponds en langue française strictement à la question suivante en respectant strictement les données du contexte. Si vous ne pouvez pas répondre à la question sur la base des informations, dites que vous ne trouvez pas de réponse ou que vous ne parvenez pas à trouver de réponse. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Ne générez pas de réponses non pertinentes. Si les informations du contexte sont insuffisantes, procédez à une projection sur le secteur, les entreprises et le marché de l'emploi, pour construire la note de composante sectorielle. Question : {question}"
|
714 |
+
# }]
|
715 |
+
#)
|
716 |
await cl.sleep(2)
|
717 |
await cl.Message(
|
718 |
+
author="Datapcc : 🌐🌐🌐",content="Note de composante sectorielle de(s) code(s) ROME : " + romeListArray[0] + "\n\n" + completion_NCS
|
719 |
).send()
|
720 |
+
cl.user_session.set("NCS" + romeListArray[0], completion_NCS)
|
721 |
+
cl.user_session.set("contextChatBot", context + "\n" + completion_NCS)
|
722 |
await cl.sleep(2)
|
723 |
listEmplois_name = f"Liste des emplois"
|
724 |
text_elements = []
|
|
|
754 |
await cl.Message(author="Datapcc : 🌐🌐🌐",content="📚 Bibliothèque de prompts : " + listPrompts_name, elements=prompt_elements).send()
|
755 |
await cl.sleep(2)
|
756 |
actions = [
|
757 |
+
cl.Action(name="download", value=completion_NCS, description="download_note_sectorielle")
|
758 |
]
|
759 |
await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la note", actions=actions).send()
|
760 |
await cl.sleep(2)
|
761 |
saves = [
|
762 |
+
cl.Action(name="saveToMemory", value=completion_NCS, description="Mettre en mémoire la note")
|
763 |
]
|
764 |
await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la note", actions=saves).send()
|
765 |
await cl.sleep(2)
|
|
|
921 |
|
922 |
@cl.step(type="llm")
|
923 |
async def IA():
|
924 |
+
os.environ['HUGGINGFACEHUB_API_TOKEN'] = os.environ['HUGGINGFACEHUB_API_TOKEN']
|
925 |
+
repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
|
926 |
+
|
927 |
+
llm = HuggingFaceEndpoint(
|
928 |
+
repo_id=repo_id, max_new_tokens=8000, temperature=0.5, streaming=True
|
929 |
+
)
|
930 |
+
return llm
|
931 |
|
932 |
|
933 |
@cl.on_settings_update
|
|
|
981 |
contextChat = cl.user_session.get("contextChatBot")
|
982 |
if not contextChat:
|
983 |
contextChat = "Il n'y a pas de contexte."
|
984 |
+
|
985 |
+
os.environ['HUGGINGFACEHUB_API_TOKEN'] = os.environ['HUGGINGFACEHUB_API_TOKEN']
|
986 |
+
repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"
|
987 |
+
|
988 |
+
model = HuggingFaceEndpoint(
|
989 |
+
repo_id=repo_id, max_new_tokens=8000, temperature=0.5, streaming=True
|
990 |
)
|
991 |
+
|
992 |
+
#model = ChatAnthropic(
|
993 |
+
# temperature=1,
|
994 |
+
# model_name="claude-3-opus-20240229"
|
995 |
+
#)
|
996 |
memory = cl.user_session.get("memory")
|
997 |
prompt = ChatPromptTemplate.from_messages(
|
998 |
[
|
|
|
1025 |
msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
|
1026 |
text_elements = []
|
1027 |
answer = []
|
1028 |
+
async for chunk in runnable.ainvoke(
|
1029 |
{"question": message.content},
|
1030 |
config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)]),
|
1031 |
#config=RunnableConfig(callbacks=[cl.LangchainCallbackHandler()]),
|