Spaces:
Running
Running
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')
|