Update main.py
Browse files
main.py
CHANGED
@@ -36,6 +36,7 @@ def Chargement_des_datas(profile):
|
|
36 |
return json.loads(Path(file_path).read_text())
|
37 |
|
38 |
@cl.step(type="tool", show_input=True)
|
|
|
39 |
def Chargement_des_datas_web(profile):
|
40 |
if profile == "Toutes les formations":
|
41 |
file_path='./public/html-MIPI-MITIC.txt'
|
@@ -62,6 +63,7 @@ def connexion_France_Travail():
|
|
62 |
client_secret=os.getenv('POLE_EMPLOI_CLIENT_SECRET'))
|
63 |
return client
|
64 |
|
|
|
65 |
def API_France_Travail_ROME(romeListArray):
|
66 |
client = connexion_France_Travail()
|
67 |
todayDate = datetime.datetime.today()
|
@@ -87,6 +89,7 @@ def API_France_Travail_ROME(romeListArray):
|
|
87 |
results_df = pd.DataFrame(results)
|
88 |
return results_df
|
89 |
|
|
|
90 |
def API_France_Travail_Metier(metier):
|
91 |
client = connexion_France_Travail()
|
92 |
todayDate = datetime.datetime.today()
|
@@ -122,6 +125,7 @@ def Generation_reponse(client, data, question):
|
|
122 |
max_tokens=1024,
|
123 |
)
|
124 |
|
|
|
125 |
def Generation_completion(client, data, question):
|
126 |
response = client.chat.complete(
|
127 |
model="Mistral-Nemo",
|
@@ -150,7 +154,7 @@ async def Affichage_reponse(response):
|
|
150 |
return msg
|
151 |
|
152 |
@cl.step(type="tool", show_input=True)
|
153 |
-
async def Affichage_question_contexte(answer, question):
|
154 |
try:
|
155 |
indexDeb = answer.index("Question en relation avec le sujet")
|
156 |
indexDebLength = len("Question en relation avec le sujet")
|
@@ -167,12 +171,12 @@ async def Affichage_question_contexte(answer, question):
|
|
167 |
extraction = answer[indexDeb + indexDebLength + 1: indexFin]
|
168 |
|
169 |
actions = [
|
170 |
-
cl.Action(name="Activer", value=extraction + "?", description=
|
171 |
]
|
172 |
await cl.Message(author="COPILOT", content="🌐 Question en relation avec le contexte : " + extraction + "?", actions=actions).send()
|
173 |
|
174 |
actionsWeb = [
|
175 |
-
cl.Action(name="Site web", value=question, description=
|
176 |
]
|
177 |
await cl.Message(author="COPILOT", content="🌐 Rechercher sur le site web de l'université : " + question, actions=actionsWeb).send()
|
178 |
|
@@ -185,11 +189,15 @@ async def on_action(action):
|
|
185 |
await cl.Message(author="COPILOT", content="📊 Connexion à Mistral").send()
|
186 |
response = Generation_reponse(client, data, question)
|
187 |
|
188 |
-
msg = await Affichage_reponse(response)
|
189 |
-
|
|
|
|
|
|
|
|
|
190 |
answer = msg.content
|
191 |
|
192 |
-
await Affichage_question_contexte(answer, question)
|
193 |
|
194 |
@cl.action_callback("Site web")
|
195 |
async def on_action(action):
|
@@ -218,11 +226,15 @@ async def on_action(action):
|
|
218 |
|
219 |
response = Generation_reponse(client, answer, question)
|
220 |
|
221 |
-
msg = await Affichage_reponse(response)
|
222 |
-
|
|
|
|
|
|
|
|
|
223 |
result = msg.content
|
224 |
|
225 |
-
await Affichage_question_contexte(result, question)
|
226 |
|
227 |
|
228 |
@cl.set_chat_profiles
|
@@ -458,18 +470,27 @@ async def main(message: cl.Message):
|
|
458 |
rt.end(outputs={"output": msg})
|
459 |
|
460 |
answer = msg.content
|
461 |
-
await Affichage_question_contexte(answer, message.content)
|
462 |
else:
|
463 |
codeRomeStr = message.content
|
464 |
if codeRomeStr.find('-') != -1 or isinstance(codeRomeStr[-4], int) or isinstance(codeRomeStr[1:5], int):
|
465 |
await cl.Message(author="COPILOT", content="📊 Connexion à l'API France Travail").send()
|
466 |
-
|
|
|
|
|
|
|
467 |
elif isinstance(codeRomeStr[-4], int):
|
468 |
await cl.Message(author="COPILOT", content="📊 Connexion à l'API France Travail").send()
|
469 |
-
|
|
|
|
|
|
|
470 |
else:
|
471 |
await cl.Message(author="COPILOT", content="📊 Connexion à l'API France Travail").send()
|
472 |
-
|
|
|
|
|
|
|
473 |
|
474 |
await cl.Message(author="COPILOT", content="📈 Tableau des emplois les plus représentatifs : " + cl.user_session.get("chat_profile")).send()
|
475 |
df_intitule = df_FT.groupby('intitule').size().reset_index(name='obs')
|
|
|
36 |
return json.loads(Path(file_path).read_text())
|
37 |
|
38 |
@cl.step(type="tool", show_input=True)
|
39 |
+
@ls.traceable(run_type="tool", name="Retrieve Context : chargement des données Web")
|
40 |
def Chargement_des_datas_web(profile):
|
41 |
if profile == "Toutes les formations":
|
42 |
file_path='./public/html-MIPI-MITIC.txt'
|
|
|
63 |
client_secret=os.getenv('POLE_EMPLOI_CLIENT_SECRET'))
|
64 |
return client
|
65 |
|
66 |
+
@traceable(run_type="chain", name="API France Travail : recherche par code ROME",)
|
67 |
def API_France_Travail_ROME(romeListArray):
|
68 |
client = connexion_France_Travail()
|
69 |
todayDate = datetime.datetime.today()
|
|
|
89 |
results_df = pd.DataFrame(results)
|
90 |
return results_df
|
91 |
|
92 |
+
@traceable(run_type="chain", name="API France Travail : recherche par métier type",)
|
93 |
def API_France_Travail_Metier(metier):
|
94 |
client = connexion_France_Travail()
|
95 |
todayDate = datetime.datetime.today()
|
|
|
125 |
max_tokens=1024,
|
126 |
)
|
127 |
|
128 |
+
@ls.traceable(run_type="llm", name="Connexion à Mistral : paramétrages de la conversation")
|
129 |
def Generation_completion(client, data, question):
|
130 |
response = client.chat.complete(
|
131 |
model="Mistral-Nemo",
|
|
|
154 |
return msg
|
155 |
|
156 |
@cl.step(type="tool", show_input=True)
|
157 |
+
async def Affichage_question_contexte(answer, question, contexte):
|
158 |
try:
|
159 |
indexDeb = answer.index("Question en relation avec le sujet")
|
160 |
indexDebLength = len("Question en relation avec le sujet")
|
|
|
171 |
extraction = answer[indexDeb + indexDebLength + 1: indexFin]
|
172 |
|
173 |
actions = [
|
174 |
+
cl.Action(name="Activer", value=extraction + "?", description=contexte)
|
175 |
]
|
176 |
await cl.Message(author="COPILOT", content="🌐 Question en relation avec le contexte : " + extraction + "?", actions=actions).send()
|
177 |
|
178 |
actionsWeb = [
|
179 |
+
cl.Action(name="Site web", value=question, description=contexte)
|
180 |
]
|
181 |
await cl.Message(author="COPILOT", content="🌐 Rechercher sur le site web de l'université : " + question, actions=actionsWeb).send()
|
182 |
|
|
|
189 |
await cl.Message(author="COPILOT", content="📊 Connexion à Mistral").send()
|
190 |
response = Generation_reponse(client, data, question)
|
191 |
|
192 |
+
#msg = await Affichage_reponse(response)
|
193 |
+
app_inputs = {"input": question}
|
194 |
+
with ls.trace("Réponse de l'assistant sur les données MIS", "chain", project_name=action.description, inputs=app_inputs) as rt:
|
195 |
+
msg = await Affichage_reponse(response, langsmith_extra={"metadata": {"session_id": session_id}})
|
196 |
+
rt.end(outputs={"output": msg})
|
197 |
+
|
198 |
answer = msg.content
|
199 |
|
200 |
+
await Affichage_question_contexte(answer, question, action.description)
|
201 |
|
202 |
@cl.action_callback("Site web")
|
203 |
async def on_action(action):
|
|
|
226 |
|
227 |
response = Generation_reponse(client, answer, question)
|
228 |
|
229 |
+
#msg = await Affichage_reponse(response)
|
230 |
+
app_inputs = {"input": question}
|
231 |
+
with ls.trace("Réponse de l'assistant sur les données Web", "chain", project_name=action.description, inputs=app_inputs) as rt:
|
232 |
+
msg = await Affichage_reponse(response, langsmith_extra={"metadata": {"session_id": session_id}})
|
233 |
+
rt.end(outputs={"output": msg})
|
234 |
+
|
235 |
result = msg.content
|
236 |
|
237 |
+
await Affichage_question_contexte(result, question, action.description)
|
238 |
|
239 |
|
240 |
@cl.set_chat_profiles
|
|
|
470 |
rt.end(outputs={"output": msg})
|
471 |
|
472 |
answer = msg.content
|
473 |
+
await Affichage_question_contexte(answer, message.content, cl.user_session.get("chat_profile"))
|
474 |
else:
|
475 |
codeRomeStr = message.content
|
476 |
if codeRomeStr.find('-') != -1 or isinstance(codeRomeStr[-4], int) or isinstance(codeRomeStr[1:5], int):
|
477 |
await cl.Message(author="COPILOT", content="📊 Connexion à l'API France Travail").send()
|
478 |
+
app_inputs = {"input": codeRomeStr}
|
479 |
+
with ls.trace("Réponse de l'assistant sur les données emplois France Travail par code ROME", "chain", project_name=cl.user_session.get("chat_profile"), inputs=app_inputs) as rt:
|
480 |
+
df_FT = API_France_Travail_ROME(codeRomeStr)
|
481 |
+
rt.end(outputs={"output": df_FT})
|
482 |
elif isinstance(codeRomeStr[-4], int):
|
483 |
await cl.Message(author="COPILOT", content="📊 Connexion à l'API France Travail").send()
|
484 |
+
app_inputs = {"input": codeRomeStr}
|
485 |
+
with ls.trace("Réponse de l'assistant sur les données emplois France Travail par code ROME", "chain", project_name=cl.user_session.get("chat_profile"), inputs=app_inputs) as rt:
|
486 |
+
df_FT = API_France_Travail_ROME(codeRomeStr)
|
487 |
+
rt.end(outputs={"output": df_FT})
|
488 |
else:
|
489 |
await cl.Message(author="COPILOT", content="📊 Connexion à l'API France Travail").send()
|
490 |
+
app_inputs = {"input": codeRomeStr}
|
491 |
+
with ls.trace("Réponse de l'assistant sur les données emplois France Travail par métier type", "chain", project_name=cl.user_session.get("chat_profile"), inputs=app_inputs) as rt:
|
492 |
+
df_FT = API_France_Travail_Metier(codeRomeStr)
|
493 |
+
rt.end(outputs={"output": df_FT})
|
494 |
|
495 |
await cl.Message(author="COPILOT", content="📈 Tableau des emplois les plus représentatifs : " + cl.user_session.get("chat_profile")).send()
|
496 |
df_intitule = df_FT.groupby('intitule').size().reset_index(name='obs')
|