datacipen commited on
Commit
b60c3fd
1 Parent(s): 38312af

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +48 -23
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
- client_anthropic = await IA()
689
  structure = str(modele('Note de composante sectorielle'))
690
  definitions = definition('activite') + ' ' + definition('competence')
691
- question ="""
 
 
 
 
 
 
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
- completion_NCS = client_anthropic.messages.create(
695
- model="claude-3-opus-20240229",
696
- max_tokens=4000,
697
- temperature=1,
698
- messages=[{
699
- "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}"
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.content[0].text
705
  ).send()
706
- cl.user_session.set("NCS" + romeListArray[0], completion_NCS.content[0].text)
707
- cl.user_session.set("contextChatBot", context + "\n" + completion_NCS.content[0].text)
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.content[0].text, description="download_note_sectorielle")
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.content[0].text, description="Mettre en mémoire la note")
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
- anthropic = Anthropic(
911
- api_key=os.environ['ANTHROPIC_API_KEY'],
912
- )
913
- return anthropic
 
 
 
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
- model = ChatAnthropic(
968
- temperature=1,
969
- model_name="claude-3-opus-20240229"
 
 
 
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.astream(
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()]),