Update main.py
Browse files
main.py
CHANGED
@@ -129,16 +129,39 @@ def Connexion_Mistral():
|
|
129 |
|
130 |
@cl.step(type="tool", show_input=True)
|
131 |
@ls.traceable(run_type="llm", name="Connexion à Mistral : paramétrages de la conversation")
|
132 |
-
def Generation_reponse(client
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
|
143 |
@ls.traceable(run_type="llm", name="Connexion à Mistral : paramétrages de la conversation")
|
144 |
def Generation_completion(client, data, question):
|
@@ -157,15 +180,23 @@ def Generation_completion(client, data, question):
|
|
157 |
|
158 |
@cl.step(type="tool", show_input=True)
|
159 |
@traceable(run_type="chain", name="Mistral Assistant des datas Gustaviz",)
|
160 |
-
async def Affichage_reponse(response):
|
|
|
161 |
msg = cl.Message(author="COPILOT",content="")
|
162 |
|
163 |
-
for
|
164 |
-
|
165 |
-
|
166 |
-
|
|
|
|
|
|
|
|
|
167 |
|
168 |
await msg.send()
|
|
|
|
|
|
|
169 |
return msg
|
170 |
|
171 |
@cl.step(type="tool", show_input=True)
|
@@ -474,14 +505,15 @@ async def on_chat_start():
|
|
474 |
async def main(message: cl.Message):
|
475 |
if cl.user_session.get("chat_profile") != "Offres d'emploi par code ROME" and cl.user_session.get("chat_profile") != "Offres d'emploi par métier type":
|
476 |
data = Chargement_des_datas(cl.user_session.get("chat_profile"))
|
|
|
477 |
cl.user_session.set("data", data)
|
478 |
client = cl.user_session.get("client")
|
479 |
|
480 |
-
response = Generation_reponse(client
|
481 |
|
482 |
app_inputs = {"input": message.content}
|
483 |
with ls.trace("Réponse de l'assistant sur les données MIS", "chain", project_name=cl.user_session.get("chat_profile"), inputs=app_inputs) as rt:
|
484 |
-
msg = await Affichage_reponse(response, langsmith_extra={"metadata": {"session_id": session_id}})
|
485 |
rt.end(outputs={"output": msg})
|
486 |
|
487 |
answer = msg.content
|
|
|
129 |
|
130 |
@cl.step(type="tool", show_input=True)
|
131 |
@ls.traceable(run_type="llm", name="Connexion à Mistral : paramétrages de la conversation")
|
132 |
+
def Generation_reponse(client):
|
133 |
+
if not cl.user_session.get("saveMemory"):
|
134 |
+
cl.user_session.set("saveMemory", "")
|
135 |
+
cl.user_session.set("memory", ConversationBufferMemory(return_messages=True))
|
136 |
+
memory = cl.user_session.get("memory")
|
137 |
+
prompt = ChatPromptTemplate.from_messages(
|
138 |
+
[
|
139 |
+
(
|
140 |
+
"system",
|
141 |
+
f"Tu es un spécialiste de l'enseignement supérieur, des formations et de la pédagogie. Tu es en capacité d'analyser en profondeur les séances pédagogiques et de les mettre en adéquation avec les théories de la recherche en éducation. Répondez à la question seulement et exclusivement à partir du contexte et des définitions ci-contre, de la manière la plus pertinente, seulement en fonction des informations fournies. Définition : les formations MIPI (Management de l'Innovation et du Patrimoine Immobilier) concernent le secteur de l'immobilier : facility management, property management, asset management. Les formations MITIC (Management de l'Innovation des Technologies de l'Information et de la Communication) concernent le secteur du numérique : management de projet, innovation et conseil, support numérique aux métiers",
|
142 |
+
),
|
143 |
+
MessagesPlaceholder(variable_name="history"),
|
144 |
+
("human", "Contexte : {data}.\n{question}. Donne le résultat au format texte markdown, jusqu'à 3000 caractères convertis en UTF-8. Continue la réponse en citant, dans un paragraphe supplémentaire de 3 lignes, introduit un saut de ligne et par \"\n📚 Sources : \", les 3 verbatim, jusqu'à 100 caractères pour chaque verbatim, avec leur numéro de ligne respectif, qui ont permis de générer la réponse, à partir du contexte. Termine la réponse en créant, dans un dernier paragraphe d'une seule et unique ligne, introduite par un saut de ligne et par \"\n📣 Question en relation avec le sujet : \", 1 seule et unique question en relation avec la question posée, en commençant la ligne par \"Question relative au contexte :\"."),
|
145 |
+
]
|
146 |
+
)
|
147 |
+
runnable = (
|
148 |
+
RunnablePassthrough.assign(
|
149 |
+
history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
|
150 |
+
)
|
151 |
+
| prompt
|
152 |
+
| client
|
153 |
)
|
154 |
+
|
155 |
+
return runnable
|
156 |
+
#return client.chat.stream(
|
157 |
+
# model="Mistral-Nemo",
|
158 |
+
# messages=[
|
159 |
+
# SystemMessage(content="Tu es un spécialiste de l'enseignement supérieur, des formations et de la pédagogie. Tu es en capacité d'analyser en profondeur les séances pédagogiques et de les mettre en adéquation avec les théories de la recherche en éducation. Répondez à la question seulement et exclusivement à partir du contexte et des définitions ci-contre, de la manière la plus pertinente, seulement en fonction des informations fournies. Contexte : " + str(data) + ". Définition : les formations MIPI (Management de l'Innovation et du Patrimoine Immobilier) concernent le secteur de l'immobilier : facility management, property management, asset management. Les formations MITIC (Management de l'Innovation des Technologies de l'Information et de la Communication) concernent le secteur du numérique : management de projet, innovation et conseil, support numérique aux métiers"),
|
160 |
+
# UserMessage(content=question + "Donne le résultat au format texte markdown, jusqu'à 3000 caractères convertis en UTF-8. Continue la réponse en citant, dans un paragraphe supplémentaire de 3 lignes, introduit un saut de ligne et par \"\n📚 Sources : \", les 3 verbatim, jusqu'à 100 caractères pour chaque verbatim, avec leur numéro de ligne respectif, qui ont permis de générer la réponse, à partir du contexte. Termine la réponse en créant, dans un dernier paragraphe d'une seule et unique ligne, introduite par un saut de ligne et par \"\n📣 Question en relation avec le sujet : \", 1 seule et unique question en relation avec la question posée, en commençant la ligne par \"Question relative au contexte :\"."),
|
161 |
+
# ],
|
162 |
+
# temperature=0.1,
|
163 |
+
# max_tokens=1024,
|
164 |
+
#)
|
165 |
|
166 |
@ls.traceable(run_type="llm", name="Connexion à Mistral : paramétrages de la conversation")
|
167 |
def Generation_completion(client, data, question):
|
|
|
180 |
|
181 |
@cl.step(type="tool", show_input=True)
|
182 |
@traceable(run_type="chain", name="Mistral Assistant des datas Gustaviz",)
|
183 |
+
async def Affichage_reponse(response, question, data):
|
184 |
+
memory = cl.user_session.get("memory")
|
185 |
msg = cl.Message(author="COPILOT",content="")
|
186 |
|
187 |
+
async for chunk in response.astream({"question": question, "data": data},config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
|
188 |
+
await msg.stream_token(chunk.replace('Ã','é').replace('©','').replace('Ã','è').replace('¨','').replace('â','\'').replace('€','').replace('™','').replace('Å','oe').replace('“','').replace('®','î').replace('´','ô').replace('<','').replace('>','').replace('/',''))
|
189 |
+
|
190 |
+
|
191 |
+
#for update in response:
|
192 |
+
# if update.data.choices:
|
193 |
+
# time.sleep(0.125)
|
194 |
+
# await msg.stream_token(update.data.choices[0].delta.content.replace('Ã','é').replace('©','').replace('Ã','è').replace('¨','').replace('â','\'').replace('€','').replace('™','').replace('Å','oe').replace('“','').replace('®','î').replace('´','ô').replace('<','').replace('>','').replace('/',''))
|
195 |
|
196 |
await msg.send()
|
197 |
+
memory.chat_memory.add_user_message(question)
|
198 |
+
memory.chat_memory.add_ai_message(msg.content)
|
199 |
+
|
200 |
return msg
|
201 |
|
202 |
@cl.step(type="tool", show_input=True)
|
|
|
505 |
async def main(message: cl.Message):
|
506 |
if cl.user_session.get("chat_profile") != "Offres d'emploi par code ROME" and cl.user_session.get("chat_profile") != "Offres d'emploi par métier type":
|
507 |
data = Chargement_des_datas(cl.user_session.get("chat_profile"))
|
508 |
+
data = str(data).replace("{","").replace("}","").replace("[","").replace("]","")
|
509 |
cl.user_session.set("data", data)
|
510 |
client = cl.user_session.get("client")
|
511 |
|
512 |
+
response = Generation_reponse(client)
|
513 |
|
514 |
app_inputs = {"input": message.content}
|
515 |
with ls.trace("Réponse de l'assistant sur les données MIS", "chain", project_name=cl.user_session.get("chat_profile"), inputs=app_inputs) as rt:
|
516 |
+
msg = await Affichage_reponse(response, message.content, data, langsmith_extra={"metadata": {"session_id": session_id}})
|
517 |
rt.end(outputs={"output": msg})
|
518 |
|
519 |
answer = msg.content
|