datacipen commited on
Commit
03bc9a1
1 Parent(s): b8a8c88

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +192 -86
main.py CHANGED
@@ -281,31 +281,45 @@ async def construction_REV(romeListArray,settings):
281
  if cl.user_session.get("FCS" + romeListArray[0]) and cl.user_session.get("allskills"):
282
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
283
  getChainSkills = await recuperation_contexte("allskills")
284
- client_anthropic = await IA()
 
285
  allcompetences = getChainSkills
286
- question = f"En fonction du contexte qui suit. Contexte : fiche synoptique : {cl.user_session.get('FCS' + romeListArray[0])}. Liste des compétences professionnelles : {allcompetences}. Crée un référentiel d'évaluation en fonction des compétences précédentes, sous la forme d'un tableau recensant les modalités d'évaluation, les compétences professionnelles et les critères d'évaluation, tu en déduiras un autre tableau en fonction des compétences professionnelles précédentes et des compétences transversales correspondantes, exploitable dans le logiciel Excel, en respectant tous les intitulés, en langue française seulement et exclusivement, en 4000 mots. Réponds et restitue le référentiel d'évaluation au format tableau."
287
- completion_REV = client_anthropic.messages.create(
288
- model="claude-3-opus-20240229",
289
- max_tokens=4000,
290
- temperature=1,
291
- messages=[{
292
- "role": 'user', "content": f"Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. 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 fournies dans le contexte ne sont pas suffisantes, fais une projection sur les modalités d'évaluation, les critères d'évaluation, pour construire le référentiel d'évaluation. Questions : {question}"
293
- }]
 
 
 
 
 
 
294
  )
 
 
 
 
 
 
 
295
  await cl.sleep(3)
296
  await cl.Message(
297
- author="Datapcc : 🌐🌐🌐",content="Référentiel d'évaluation :\n\n" + completion_REV.content[0].text
298
  ).send()
299
- cl.user_session.set("REV" + romeListArray[0], completion_REV.content[0].text)
300
- cl.user_session.set("contextChatBot", completion_REV.content[0].text)
301
  await cl.sleep(2)
302
  actions = [
303
- cl.Action(name="download", value=completion_REV.content[0].text, description="download_referentiel_evaluation")
304
  ]
305
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger le référentiel", actions=actions).send()
306
  await cl.sleep(2)
307
  saves = [
308
- cl.Action(name="saveToMemory", value=completion_REV.content[0].text, description="Mettre en mémoire le référentiel")
309
  ]
310
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire le référentiel", actions=saves).send()
311
  await cl.sleep(2)
@@ -319,6 +333,8 @@ async def construction_REV(romeListArray,settings):
319
  await cl.Message(
320
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
321
  ).send()
 
 
322
  return "Construction du Référentiel d'Evaluation"
323
 
324
  @literal_client.step(type="run")
@@ -327,32 +343,46 @@ async def construction_MDC(romeListArray,settings):
327
  await recuperation_contexte("FCS" + romeListArray[0])
328
  getChainSkills = await recuperation_contexte("allskills")
329
  getChainMDF = await recuperation_contexte("MDF" + romeListArray[0])
330
- client_anthropic = await IA()
 
331
  allcompetences = getChainSkills
332
  allmodules = getChainMDF
333
- question = f"En fonction du contexte qui suit. Contexte : liste des compétences professionnelles : {allcompetences}. Liste des modules de formation et des cours : {allmodules}. Déduis une matrice de cohérences en corrélation des modules de formation, des cours précédents et des compétences professionnelles précédentes ci-avant, sous la forme d'un tableau à double entrée, exploitable dans le logiciel Excel, en respectant tous les intitulés, et rempli par des coches entre les modules, les cours et les compétences professionnelles correspondantes, en langue française seulement et exclusivement, en 4000 mots. Réponds et restitue la matrice de cohérences au format tableau avec des lignes correspondant aux modules de formation et aux cours et des colonnes avec des titres de colonne correspondant aux compétences professionnelles, et pour finir des cellules avec les coches X montrant la corrélation entre les modules, les cours et les compétences professionnelles."
334
- completion_MDC = client_anthropic.messages.create(
335
- model="claude-3-opus-20240229",
336
- max_tokens=4000,
337
- temperature=1,
338
- messages=[{
339
- "role": 'user', "content": f"Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. 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 quand même à une estimation et donc à une projection sur les liens entre les modules de formation et les compétences, pour construire la matrice de cohérences. Questions : {question}"
340
- }]
 
 
 
 
 
 
341
  )
 
 
 
 
 
 
 
342
  await cl.sleep(3)
343
  await cl.Message(
344
- author="Datapcc : 🌐🌐🌐",content="Matrice de cohérences :\n\n" + completion_MDC.content[0].text
345
  ).send()
346
- cl.user_session.set("MDC" + romeListArray[0], completion_MDC.content[0].text)
347
- cl.user_session.set("contextChatBot", completion_MDC.content[0].text)
348
  await cl.sleep(2)
349
  actions = [
350
- cl.Action(name="download", value=completion_MDC.content[0].text, description="download_matrice_coherence")
351
  ]
352
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la matrice", actions=actions).send()
353
  await cl.sleep(2)
354
  saves = [
355
- cl.Action(name="saveToMemory", value=completion_MDC.content[0].text, description="Mettre en mémoire la matrice")
356
  ]
357
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la matrice", actions=saves).send()
358
  await cl.sleep(2)
@@ -366,6 +396,8 @@ async def construction_MDC(romeListArray,settings):
366
  await cl.Message(
367
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
368
  ).send()
 
 
369
  return "Construction de la Matrice de Cohérences"
370
  @literal_client.step(type="run")
371
  async def construction_MDF(romeListArray,settings):
@@ -374,32 +406,47 @@ async def construction_MDF(romeListArray,settings):
374
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
375
  getChainSkills = await recuperation_contexte("allskills")
376
  getChainActivities = await recuperation_contexte("allactivities")
377
- client_anthropic = await IA()
 
378
  allactivites = getChainActivities
379
  allcompetences = getChainSkills
380
- question = f"En fonction du contexte qui suit. Contexte : note de composante sectorielle : {getChainNCS} à partir de laquelle tu fais une déduction des niveaux d'études, de l'expérience professionnelle, des besoins de formation caractérisés ainsi que des objectifs à atteindre pendant ces formations. Liste des activités professionnelles : {allactivites}. Liste des compétences professionnelles : {allcompetences}. Public cible : de la note de composante sectorielle, donne les niveaux d'études requis en fonction des niveaux de qualification donnés dans la note de composante sectorielle. Déduis un ensemble de 10 modules de formations, en corrélation avec les compétences professionnelles précédentes, dont les intitulés seront très détaillés et très complèts, entrecoupés eux-mêmes de 5 cours, en langue française seulement et exclusivement, en 4000 mots. Réponds et restitue la réponse au format tableau de 10 lignes correspondant aux 10 compétences professionnelles et de 3 colonnes dont les intitulés du header sont les compétences professionnelles, les modules de formation et les cours associés."
381
- completion_MDF = client_anthropic.messages.create(
382
- model="claude-3-opus-20240229",
383
- max_tokens=4000,
384
- temperature=1,
385
- messages=[{
386
- "role": 'user', "content": f"Réponds à la question suivante en utilisant seulement le contexte détaillé ci-après. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Si les informations du contexte sont insuffisantes, crée approximativement les modules de formation et les cours tout en réalisant une estimation sur les intitulés, et tout en faisant une prédiction et donc une projection sur les objectifs pédagogiques, les besoins en compétences et en formation, les niveaux requis, les lacunes à combler, les méthodes pédagogiques et les objectifs d'apprentissage, pour construire les modules de formation. Questions : {question}"
387
- }]
 
 
 
 
 
 
 
388
  )
 
 
 
 
 
 
 
389
  await cl.sleep(3)
390
  await cl.Message(
391
- author="Datapcc : 🌐🌐🌐",content="Modules de formations :\n\n" + completion_MDF.content[0].text
392
  ).send()
393
- cl.user_session.set("MDF" + romeListArray[0], completion_MDF.content[0].text)
394
- cl.user_session.set("contextChatBot", getChainSkills + "\n" + completion_MDF.content[0].text)
395
  await cl.sleep(2)
396
  actions = [
397
- cl.Action(name="download", value=completion_MDF.content[0].text, description="download_module_formation")
398
  ]
399
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger les modules", actions=actions).send()
400
  await cl.sleep(2)
401
  saves = [
402
- cl.Action(name="saveToMemory", value=completion_MDF.content[0].text, description="Mettre en mémoire les modules")
403
  ]
404
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire les modules", actions=saves).send()
405
  await cl.sleep(2)
@@ -413,41 +460,58 @@ async def construction_MDF(romeListArray,settings):
413
  await cl.Message(
414
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
415
  ).send()
 
 
416
  return "Construction des Modules de formation - Cours"
417
 
418
  @literal_client.step(type="run")
419
  async def construction_FCC(romeListArray,settings):
420
  if cl.user_session.get("FCS" + romeListArray[0]) and (settings['competence'].find('--- Choisir une compétence ---')==-1 or settings['competenceInput']):
421
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
422
- client_anthropic = await IA()
 
423
  ficheSynoptique = getChain
424
  if settings['competenceInput']:
425
  competenceSingle = settings['competenceInput']
426
  else:
427
  competenceSingle = settings['competence']
428
- question = f"En fonction de la compétence : {competenceSingle}, issue du document précédent correspondant à la fiche synoptique, crée une fiche compétence très détaillée et très complète de la compétence professionnelle précédente, en se fixant sur les mots de l'intitulé de cette même compétence professionnelle, en 3000 mots et 5 paragraphes comportant les paragraphes suivants : 1. description de la compétence et le processus de la mise en oeuvre dans laquelle seront identifiées les situations susceptibles de déclencher la mise en oeuvre des tâches et la mobilisation des savoirs, 2. contexte exposant les conditions et les contraintes d'exécution ainsi que les environnements techniques, 3. critères exposant les critères de réussite de l'action et correspondant à une pertinence une efficience une efficacité une cohérence, 4. liste des savoirs et savoir-faire et savoirs comportementaux."
429
- completion_FCC = client_anthropic.messages.create(
430
- model="claude-3-opus-20240229",
431
- max_tokens=4000,
432
- temperature=1,
433
- messages=[{
434
- "role": 'user', "content": f"Contexte : Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Contexte: Définition d'une compétence : la compétence est une combinaison de savoirs en action, mobilisés en vue de réaliser une activité professionnelle. Elle s'apprécie, en tant qu'acquis de l'apprentissage selon des modalités adaptées permettant d'en certifier la possession et au regard de l'atteinte d'un résultat pour un niveau d'exigence prédéterminé. Les compétences peuvent être regroupées par domaines selon la nature et leur liaison subordonnée aux activités. Elles s'écrivent à l'aide de verbe d'action à l'infinitif comme le stipule la taxonomie de Bloom pour marquer une progression dans l'exercice de la compétence. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Fiche synoptique : {ficheSynoptique}. Questions : {question}"
435
- }]
 
 
 
 
 
 
 
436
  )
 
 
 
 
 
 
 
437
  await cl.sleep(3)
438
  await cl.Message(
439
- author="Datapcc : 🌐🌐🌐",content="Fiche compétence : " + competenceSingle + "\n\n" + completion_FCC.content[0].text
440
  ).send()
441
- cl.user_session.set("FCC" + romeListArray[0], completion_FCC.content[0].text)
442
- cl.user_session.set("contextChatBot", ficheSynoptique + "\n" + completion_FCC.content[0].text)
443
  await cl.sleep(2)
444
  actions = [
445
- cl.Action(name="download", value=completion_FCC.content[0].text, description="download_fiche_competence")
446
  ]
447
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la fiche", actions=actions).send()
448
  await cl.sleep(2)
449
  saves = [
450
- cl.Action(name="saveToMemory", value=completion_FCC.content[0].text, description="Mettre en mémoire la fiche")
451
  ]
452
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la fiche", actions=saves).send()
453
  await cl.sleep(2)
@@ -461,41 +525,58 @@ async def construction_FCC(romeListArray,settings):
461
  await cl.Message(
462
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
463
  ).send()
 
 
464
  return "Construction de la Fiche Compétence : " + competenceSingle
465
 
466
  @literal_client.step(type="run")
467
  async def construction_FCA(romeListArray,settings):
468
  if cl.user_session.get("FCS" + romeListArray[0]) and (settings['activite'].find('--- Choisir une activité ---')==-1 or settings['activiteInput']):
469
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
470
- client_anthropic = await IA()
 
471
  ficheSynoptique = getChain
472
  if settings['activiteInput']:
473
  activiteSingle = settings['activiteInput']
474
  else:
475
  activiteSingle = settings['activite']
476
- question = f"En fonction de l'activité : {activiteSingle}, issue du document précédent correspondant à la fiche synoptique, crée une fiche activité très détaillée et très complète de l'activité professionnelle précédente, en se fixant sur les mots de l'intitulé de cette même activité professionnelle, en 3000 mots et 5 paragraphes comportant les paragraphes suivants : 1. description de l'activité pour indiquer la finalité de l'activité en terme de service ou de produit, 2. description pour indiquer les étapes du processus métier en décrivant la combinatoire entre les principales compétences de l'activité et en indiquant les actions et les opérations avec les ressources et les moyens nécessaires pour finalement décrire les relations hiérarchiques et fonctionnelles des interlocuteurs, 3. contextualisation pour indiquer les conditions d'exercice de l'activité : lieu mobilité risques astreintes, 4. liste des compétences professionnelles de l'activité, 5. compétences transversales de l'activité."
477
- completion_FCA = client_anthropic.messages.create(
478
- model="claude-3-opus-20240229",
479
- max_tokens=4000,
480
- temperature=1,
481
- messages=[{
482
- "role": 'user', "content": f"Contexte : Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Contexte: Définition d'une activité : une activité est un ensemble cohérent d'actions combinées : pour la réaliser, plusieurs compétences et opérations sont nécessaires, soit successivement, soit conjointement. Elles s'inscrivent à des moments clés du processus de réalisation et ne peuvent en aucun cas être occultées, car elles conditionnent le résultat. Plusieurs activités en vue d'une finalité avec une valeur ajoutée à un produit ou un service sont nécessaires pour mettre en œuvre un processus métier. De ce fait, il est essentiel de déterminer pour chaque activité sa propre finalité et de s'assurer que l'ensemble des activités participent bien d'un même processus. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Fiche synoptique : {ficheSynoptique}. Questions : {question}"
483
- }]
 
 
 
 
 
 
 
484
  )
 
 
 
 
 
 
 
485
  await cl.sleep(3)
486
  await cl.Message(
487
- author="Datapcc : 🌐🌐🌐",content="Fiche activité : " + activiteSingle + "\n\n" + completion_FCA.content[0].text
488
  ).send()
489
- cl.user_session.set("FCA" + romeListArray[0], completion_FCA.content[0].text)
490
- cl.user_session.set("contextChatBot", ficheSynoptique + "\n" + completion_FCA.content[0].text)
491
  await cl.sleep(2)
492
  actions = [
493
- cl.Action(name="download", value=completion_FCA.content[0].text, description="download_fiche_activite")
494
  ]
495
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la fiche", actions=actions).send()
496
  await cl.sleep(2)
497
  saves = [
498
- cl.Action(name="saveToMemory", value=completion_FCA.content[0].text, description="Mettre en mémoire la fiche")
499
  ]
500
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la fiche", actions=saves).send()
501
  await cl.sleep(2)
@@ -509,6 +590,8 @@ async def construction_FCA(romeListArray,settings):
509
  await cl.Message(
510
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
511
  ).send()
 
 
512
  return "Construction de la Fiche Activité" + activiteSingle
513
 
514
  @literal_client.step(type="run")
@@ -527,31 +610,48 @@ async def construction_FPPS(romeListArray,settings):
527
  ficheSynoptique = await recuperation_contexte("FCS" + romeListArray[0])
528
  intituleFormation = goFPPS1['output']
529
  codesRome = goFPPS2['output']
 
 
 
 
 
 
 
 
 
 
 
 
530
  client_anthropic = await IA()
531
  question =f"En fonction du contexte intégrant les descriptifs de formation, la note de composante sectorielle et la fiche synoptique, crée une fiche Potentiel Profil de Sortie sous forme d'une fiche descriptive très détaillée et très complète, construite d'après le modèle et la structure de document suivante. Structure de document : {str(modele('Fiche Potentiel Profil de Sortie'))}"
532
- completion_FPPS = client_anthropic.messages.create(
533
- model="claude-3-opus-20240229",
534
- max_tokens=4000,
535
- temperature=1,
536
- messages=[{
537
- "role": 'user', "content": f"Contexte : Réponds à la question suivante en utilisant le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Essayez donc de comprendre en profondeur le contexte et répondez en vous basant sur les informations fournies. Contexte: Descriptifs de formation : {infoFormation}. Note de composante sectorielle : {noteSectorielle}. Fiche Synoptique : {ficheSynoptique}. Intitulé de la formation : {intituleFormation}. Codes ROME : {codesRome}. Questions : {question}"
538
- }]
539
  )
540
- completionFPPS = completion_FPPS.content[0].text
 
 
 
 
 
 
541
  await cl.sleep(0.5)
542
  await cl.Message(
543
- author="Datapcc : 🌐🌐🌐",content="Fiche Potentiel Profil de sortie : " + romeListArray[1] + "\n\n" + completion_FPPS.content[0].text
544
  ).send()
545
- cl.user_session.set("FPPS" + romeListArray[0], completion_FPPS.content[0].text)
546
- cl.user_session.set("contextChatBot", "Note sectorielle" + noteSectorielle + "\nFiche syoptique" + ficheSynoptique + "\nFiche Potentiel Profil de sortie" + completion_FPPS.content[0].text)
547
  await cl.sleep(1)
548
  actions = [
549
- cl.Action(name="download", value=completion_FPPS.content[0].text, description="download_fiche_synoptique")
550
  ]
551
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la fiche", actions=actions).send()
552
  await cl.sleep(1)
553
  saves = [
554
- cl.Action(name="saveToMemory", value=completion_FPPS.content[0].text, description="Mettre en mémoire la fiche")
555
  ]
556
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la fiche", actions=saves).send()
557
  await cl.sleep(1)
@@ -563,6 +663,8 @@ async def construction_FPPS(romeListArray,settings):
563
  await cl.Message(
564
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Note sectorielle ou de Fiche Synoptique!"
565
  ).send()
 
 
566
  return "Construction de la Fiche Potentiel Profil de Sortie"
567
 
568
  @literal_client.step(type="run")
@@ -694,6 +796,8 @@ async def construction_FCS(romeListArray,settings):
694
  await cl.Message(
695
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Note sectorielle!"
696
  ).send()
 
 
697
  return "Construction de la Fiche Synoptique"
698
 
699
  @literal_client.step(type="run")
@@ -724,8 +828,7 @@ async def construction_NCS(romeListArray):
724
  )
725
  | prompt | client_llm
726
  )
727
- #completion_NCS = chain.invoke({"question":question_p,"context":context_p})
728
-
729
  msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
730
  async for chunk in chain.astream({"question":question_p,"context":context_p},
731
  config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
@@ -778,6 +881,8 @@ async def construction_NCS(romeListArray):
778
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la note", actions=saves).send()
779
  await cl.sleep(2)
780
 
 
 
781
  return "Construction de la Note Sectorielle"
782
 
783
  @cl.step(type="run")
@@ -1037,7 +1142,8 @@ async def main(message: cl.Message):
1037
  msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
1038
  text_elements = []
1039
  answer = []
1040
- async for chunk in runnable.astream({"question": message.content}):
 
1041
  await parent_step.stream_token(chunk)
1042
  await msg.stream_token(chunk)
1043
 
 
281
  if cl.user_session.get("FCS" + romeListArray[0]) and cl.user_session.get("allskills"):
282
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
283
  getChainSkills = await recuperation_contexte("allskills")
284
+ memory = ConversationBufferMemory(return_messages=True)
285
+ client_llm = await IA()
286
  allcompetences = getChainSkills
287
+ 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.
288
+
289
+ En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez à la question ci-dessous à partir du contexte ci-dessous :
290
+ {context}
291
+ {question} [/INST] </s>
292
+ """
293
+ question_p = f"En fonction du contexte qui suit. Contexte : fiche synoptique : {cl.user_session.get('FCS' + romeListArray[0])}. Liste des compétences professionnelles : {allcompetences}. Crée un référentiel d'évaluation en fonction des compétences précédentes, sous la forme d'un tableau recensant les modalités d'évaluation, les compétences professionnelles et les critères d'évaluation, tu en déduiras un autre tableau en fonction des compétences professionnelles précédentes et des compétences transversales correspondantes, exploitable dans le logiciel Excel, en respectant tous les intitulés, en langue française seulement et exclusivement, en 4000 mots. Réponds et restitue le référentiel d'évaluation au format tableau."
294
+ context_p = f"Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. 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 fournies dans le contexte ne sont pas suffisantes, fais une projection sur les modalités d'évaluation, les critères d'évaluation, pour construire le référentiel d'évaluation."
295
+ prompt = PromptTemplate(template=template, input_variables=["question","context"])
296
+ chain = (
297
+ RunnablePassthrough.assign(
298
+ history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
299
+ )
300
+ | prompt | client_llm
301
  )
302
+
303
+ msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
304
+ async for chunk in chain.astream({"question":question_p,"context":context_p},
305
+ config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
306
+ await msg.stream_token(chunk)
307
+ completionREV = msg.content
308
+
309
  await cl.sleep(3)
310
  await cl.Message(
311
+ author="Datapcc : 🌐🌐🌐",content="Référentiel d'évaluation :\n\n" + completionREV
312
  ).send()
313
+ cl.user_session.set("REV" + romeListArray[0], completionREV)
314
+ cl.user_session.set("contextChatBot", completionREV)
315
  await cl.sleep(2)
316
  actions = [
317
+ cl.Action(name="download", value=completionREV, description="download_referentiel_evaluation")
318
  ]
319
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger le référentiel", actions=actions).send()
320
  await cl.sleep(2)
321
  saves = [
322
+ cl.Action(name="saveToMemory", value=completionREV, description="Mettre en mémoire le référentiel")
323
  ]
324
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire le référentiel", actions=saves).send()
325
  await cl.sleep(2)
 
333
  await cl.Message(
334
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
335
  ).send()
336
+ memory.chat_memory.add_user_message(question_p)
337
+ memory.chat_memory.add_ai_message(msg.content)
338
  return "Construction du Référentiel d'Evaluation"
339
 
340
  @literal_client.step(type="run")
 
343
  await recuperation_contexte("FCS" + romeListArray[0])
344
  getChainSkills = await recuperation_contexte("allskills")
345
  getChainMDF = await recuperation_contexte("MDF" + romeListArray[0])
346
+ memory = ConversationBufferMemory(return_messages=True)
347
+ client_llm = await IA()
348
  allcompetences = getChainSkills
349
  allmodules = getChainMDF
350
+ 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.
351
+
352
+ En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez à la question ci-dessous à partir du contexte ci-dessous :
353
+ {context}
354
+ {question} [/INST] </s>
355
+ """
356
+ question_p = f"En fonction du contexte qui suit. Contexte : liste des compétences professionnelles : {allcompetences}. Liste des modules de formation et des cours : {allmodules}. Déduis une matrice de cohérences en corrélation des modules de formation, des cours précédents et des compétences professionnelles précédentes ci-avant, sous la forme d'un tableau à double entrée, exploitable dans le logiciel Excel, en respectant tous les intitulés, et rempli par des coches entre les modules, les cours et les compétences professionnelles correspondantes, en langue française seulement et exclusivement, en 4000 mots. Réponds et restitue la matrice de cohérences au format tableau avec des lignes correspondant aux modules de formation et aux cours et des colonnes avec des titres de colonne correspondant aux compétences professionnelles, et pour finir des cellules avec les coches X montrant la corrélation entre les modules, les cours et les compétences professionnelles."
357
+ context_p = f"Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. 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 quand même à une estimation et donc à une projection sur les liens entre les modules de formation et les compétences, pour construire la matrice de cohérences."
358
+ prompt = PromptTemplate(template=template, input_variables=["question","context"])
359
+ chain = (
360
+ RunnablePassthrough.assign(
361
+ history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
362
+ )
363
+ | prompt | client_llm
364
  )
365
+
366
+ msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
367
+ async for chunk in chain.astream({"question":question_p,"context":context_p},
368
+ config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
369
+ await msg.stream_token(chunk)
370
+ completionMDC = msg.content
371
+
372
  await cl.sleep(3)
373
  await cl.Message(
374
+ author="Datapcc : 🌐🌐🌐",content="Matrice de cohérences :\n\n" + completionMDC
375
  ).send()
376
+ cl.user_session.set("MDC" + romeListArray[0], completionMDC)
377
+ cl.user_session.set("contextChatBot", completionMDC)
378
  await cl.sleep(2)
379
  actions = [
380
+ cl.Action(name="download", value=completionMDC, description="download_matrice_coherence")
381
  ]
382
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la matrice", actions=actions).send()
383
  await cl.sleep(2)
384
  saves = [
385
+ cl.Action(name="saveToMemory", value=completionMDC, description="Mettre en mémoire la matrice")
386
  ]
387
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la matrice", actions=saves).send()
388
  await cl.sleep(2)
 
396
  await cl.Message(
397
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
398
  ).send()
399
+ memory.chat_memory.add_user_message(question_p)
400
+ memory.chat_memory.add_ai_message(msg.content)
401
  return "Construction de la Matrice de Cohérences"
402
  @literal_client.step(type="run")
403
  async def construction_MDF(romeListArray,settings):
 
406
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
407
  getChainSkills = await recuperation_contexte("allskills")
408
  getChainActivities = await recuperation_contexte("allactivities")
409
+ memory = ConversationBufferMemory(return_messages=True)
410
+ client_llm = await IA()
411
  allactivites = getChainActivities
412
  allcompetences = getChainSkills
413
+
414
+ 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.
415
+
416
+ En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez à la question ci-dessous à partir du contexte ci-dessous :
417
+ {context}
418
+ {question} [/INST] </s>
419
+ """
420
+ question_p = f"En fonction du contexte qui suit. Contexte : note de composante sectorielle : {getChainNCS} à partir de laquelle tu fais une déduction des niveaux d'études, de l'expérience professionnelle, des besoins de formation caractérisés ainsi que des objectifs à atteindre pendant ces formations. Liste des activités professionnelles : {allactivites}. Liste des compétences professionnelles : {allcompetences}. Public cible : de la note de composante sectorielle, donne les niveaux d'études requis en fonction des niveaux de qualification donnés dans la note de composante sectorielle. Déduis un ensemble de 10 modules de formations, en corrélation avec les compétences professionnelles précédentes, dont les intitulés seront très détaillés et très complèts, entrecoupés eux-mêmes de 5 cours, en langue française seulement et exclusivement, en 4000 mots. Réponds et restitue la réponse au format tableau de 10 lignes correspondant aux 10 compétences professionnelles et de 3 colonnes dont les intitulés du header sont les compétences professionnelles, les modules de formation et les cours associés."
421
+ context_p = f"Réponds à la question suivante en utilisant seulement le contexte détaillé ci-après. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Si les informations du contexte sont insuffisantes, crée approximativement les modules de formation et les cours tout en réalisant une estimation sur les intitulés, et tout en faisant une prédiction et donc une projection sur les objectifs pédagogiques, les besoins en compétences et en formation, les niveaux requis, les lacunes à combler, les méthodes pédagogiques et les objectifs d'apprentissage, pour construire les modules de formation."
422
+ prompt = PromptTemplate(template=template, input_variables=["question","context"])
423
+ chain = (
424
+ RunnablePassthrough.assign(
425
+ history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
426
+ )
427
+ | prompt | client_llm
428
  )
429
+
430
+ msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
431
+ async for chunk in chain.astream({"question":question_p,"context":context_p},
432
+ config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
433
+ await msg.stream_token(chunk)
434
+ completionMDF = msg.content
435
+
436
  await cl.sleep(3)
437
  await cl.Message(
438
+ author="Datapcc : 🌐🌐🌐",content="Modules de formations :\n\n" + completionMDF
439
  ).send()
440
+ cl.user_session.set("MDF" + romeListArray[0], completionMDF)
441
+ cl.user_session.set("contextChatBot", getChainSkills + "\n" + completionMDF)
442
  await cl.sleep(2)
443
  actions = [
444
+ cl.Action(name="download", value=completionMDF, description="download_module_formation")
445
  ]
446
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger les modules", actions=actions).send()
447
  await cl.sleep(2)
448
  saves = [
449
+ cl.Action(name="saveToMemory", value=completionMDF, description="Mettre en mémoire les modules")
450
  ]
451
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire les modules", actions=saves).send()
452
  await cl.sleep(2)
 
460
  await cl.Message(
461
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
462
  ).send()
463
+ memory.chat_memory.add_user_message(question_p)
464
+ memory.chat_memory.add_ai_message(msg.content)
465
  return "Construction des Modules de formation - Cours"
466
 
467
  @literal_client.step(type="run")
468
  async def construction_FCC(romeListArray,settings):
469
  if cl.user_session.get("FCS" + romeListArray[0]) and (settings['competence'].find('--- Choisir une compétence ---')==-1 or settings['competenceInput']):
470
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
471
+ memory = ConversationBufferMemory(return_messages=True)
472
+ client_llm = await IA()
473
  ficheSynoptique = getChain
474
  if settings['competenceInput']:
475
  competenceSingle = settings['competenceInput']
476
  else:
477
  competenceSingle = settings['competence']
478
+
479
+ 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.
480
+
481
+ En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez à la question ci-dessous à partir du contexte ci-dessous :
482
+ {context}
483
+ {question} [/INST] </s>
484
+ """
485
+ question_p =f"En fonction de la compétence : {competenceSingle}, issue du document précédent correspondant à la fiche synoptique, crée une fiche compétence très détaillée et très complète de la compétence professionnelle précédente, en se fixant sur les mots de l'intitulé de cette même compétence professionnelle, en 3000 mots et 5 paragraphes comportant les paragraphes suivants : 1. description de la compétence et le processus de la mise en oeuvre dans laquelle seront identifiées les situations susceptibles de déclencher la mise en oeuvre des tâches et la mobilisation des savoirs, 2. contexte exposant les conditions et les contraintes d'exécution ainsi que les environnements techniques, 3. critères exposant les critères de réussite de l'action et correspondant à une pertinence une efficience une efficacité une cohérence, 4. liste des savoirs et savoir-faire et savoirs comportementaux."
486
+ context_p = f"Contexte : Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Contexte: Définition d'une compétence : la compétence est une combinaison de savoirs en action, mobilisés en vue de réaliser une activité professionnelle. Elle s'apprécie, en tant qu'acquis de l'apprentissage selon des modalités adaptées permettant d'en certifier la possession et au regard de l'atteinte d'un résultat pour un niveau d'exigence prédéterminé. Les compétences peuvent être regroupées par domaines selon la nature et leur liaison subordonnée aux activités. Elles s'écrivent à l'aide de verbe d'action à l'infinitif comme le stipule la taxonomie de Bloom pour marquer une progression dans l'exercice de la compétence. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Fiche synoptique : {ficheSynoptique}."
487
+ prompt = PromptTemplate(template=template, input_variables=["question","context"])
488
+ chain = (
489
+ RunnablePassthrough.assign(
490
+ history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
491
+ )
492
+ | prompt | client_llm
493
  )
494
+
495
+ msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
496
+ async for chunk in chain.astream({"question":question_p,"context":context_p},
497
+ config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
498
+ await msg.stream_token(chunk)
499
+ completionFCC = msg.content
500
+
501
  await cl.sleep(3)
502
  await cl.Message(
503
+ author="Datapcc : 🌐🌐🌐",content="Fiche compétence : " + competenceSingle + "\n\n" + completionFCC
504
  ).send()
505
+ cl.user_session.set("FCC" + romeListArray[0], completionFCC)
506
+ cl.user_session.set("contextChatBot", ficheSynoptique + "\n" + completionFCC)
507
  await cl.sleep(2)
508
  actions = [
509
+ cl.Action(name="download", value=completionFCC, description="download_fiche_competence")
510
  ]
511
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la fiche", actions=actions).send()
512
  await cl.sleep(2)
513
  saves = [
514
+ cl.Action(name="saveToMemory", value=completionFCC, description="Mettre en mémoire la fiche")
515
  ]
516
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la fiche", actions=saves).send()
517
  await cl.sleep(2)
 
525
  await cl.Message(
526
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
527
  ).send()
528
+ memory.chat_memory.add_user_message(question_p)
529
+ memory.chat_memory.add_ai_message(msg.content)
530
  return "Construction de la Fiche Compétence : " + competenceSingle
531
 
532
  @literal_client.step(type="run")
533
  async def construction_FCA(romeListArray,settings):
534
  if cl.user_session.get("FCS" + romeListArray[0]) and (settings['activite'].find('--- Choisir une activité ---')==-1 or settings['activiteInput']):
535
  getChain = await recuperation_contexte("FCS" + romeListArray[0])
536
+ memory = ConversationBufferMemory(return_messages=True)
537
+ client_llm = await IA()
538
  ficheSynoptique = getChain
539
  if settings['activiteInput']:
540
  activiteSingle = settings['activiteInput']
541
  else:
542
  activiteSingle = settings['activite']
543
+
544
+ 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.
545
+
546
+ En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez à la question ci-dessous à partir du contexte ci-dessous :
547
+ {context}
548
+ {question} [/INST] </s>
549
+ """
550
+ question_p = f"En fonction de l'activité : {activiteSingle}, issue du document précédent correspondant à la fiche synoptique, crée une fiche activité très détaillée et très complète de l'activité professionnelle précédente, en se fixant sur les mots de l'intitulé de cette même activité professionnelle, en 3000 mots et 5 paragraphes comportant les paragraphes suivants : 1. description de l'activité pour indiquer la finalité de l'activité en terme de service ou de produit, 2. description pour indiquer les étapes du processus métier en décrivant la combinatoire entre les principales compétences de l'activité et en indiquant les actions et les opérations avec les ressources et les moyens nécessaires pour finalement décrire les relations hiérarchiques et fonctionnelles des interlocuteurs, 3. contextualisation pour indiquer les conditions d'exercice de l'activité : lieu mobilité risques astreintes, 4. liste des compétences professionnelles de l'activité, 5. compétences transversales de l'activité."
551
+ context_p = f"Contexte : Réponds à la question suivante en utilisant seulement le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Contexte: Définition d'une activité : une activité est un ensemble cohérent d'actions combinées : pour la réaliser, plusieurs compétences et opérations sont nécessaires, soit successivement, soit conjointement. Elles s'inscrivent à des moments clés du processus de réalisation et ne peuvent en aucun cas être occultées, car elles conditionnent le résultat. Plusieurs activités en vue d'une finalité avec une valeur ajoutée à un produit ou un service sont nécessaires pour mettre en œuvre un processus métier. De ce fait, il est essentiel de déterminer pour chaque activité sa propre finalité et de s'assurer que l'ensemble des activités participent bien d'un même processus. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Fiche synoptique : {ficheSynoptique}."
552
+ prompt = PromptTemplate(template=template, input_variables=["question","context"])
553
+ chain = (
554
+ RunnablePassthrough.assign(
555
+ history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
556
+ )
557
+ | prompt | client_llm
558
  )
559
+
560
+ msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
561
+ async for chunk in chain.astream({"question":question_p,"context":context_p},
562
+ config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
563
+ await msg.stream_token(chunk)
564
+ completionFCA = msg.content
565
+
566
  await cl.sleep(3)
567
  await cl.Message(
568
+ author="Datapcc : 🌐🌐🌐",content="Fiche activité : " + activiteSingle + "\n\n" + completionFCS
569
  ).send()
570
+ cl.user_session.set("FCA" + romeListArray[0], completionFCS)
571
+ cl.user_session.set("contextChatBot", ficheSynoptique + "\n" + completionFCS)
572
  await cl.sleep(2)
573
  actions = [
574
+ cl.Action(name="download", value=completionFCS, description="download_fiche_activite")
575
  ]
576
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la fiche", actions=actions).send()
577
  await cl.sleep(2)
578
  saves = [
579
+ cl.Action(name="saveToMemory", value=completionFCS, description="Mettre en mémoire la fiche")
580
  ]
581
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la fiche", actions=saves).send()
582
  await cl.sleep(2)
 
590
  await cl.Message(
591
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Fiche synoptique!"
592
  ).send()
593
+ memory.chat_memory.add_user_message(question_p)
594
+ memory.chat_memory.add_ai_message(msg.content)
595
  return "Construction de la Fiche Activité" + activiteSingle
596
 
597
  @literal_client.step(type="run")
 
610
  ficheSynoptique = await recuperation_contexte("FCS" + romeListArray[0])
611
  intituleFormation = goFPPS1['output']
612
  codesRome = goFPPS2['output']
613
+
614
+ client_llm = await IA()
615
+
616
+ 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.
617
+
618
+ En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez à la question ci-dessous à partir du contexte ci-dessous :
619
+ {context}
620
+ {question} [/INST] </s>
621
+ """
622
+ question_p =f"En fonction du contexte intégrant les descriptifs de formation, la note de composante sectorielle et la fiche synoptique, crée une fiche Potentiel Profil de Sortie sous forme d'une fiche descriptive très détaillée et très complète, construite d'après le modèle et la structure de document suivante. Structure de document : {str(modele('Fiche Potentiel Profil de Sortie'))}"
623
+ context_p = f"Contexte : Réponds à la question suivante en utilisant le contexte ci-contre. Réponds à la manière d'un ingénieur pédagogique pour créer un référentiel. Essayez donc de comprendre en profondeur le contexte et répondez en vous basant sur les informations fournies. Contexte: Descriptifs de formation : {infoFormation}. Note de composante sectorielle : {noteSectorielle}. Fiche Synoptique : {ficheSynoptique}. Intitulé de la formation : {intituleFormation}. Codes ROME : {codesRome}."
624
+
625
  client_anthropic = await IA()
626
  question =f"En fonction du contexte intégrant les descriptifs de formation, la note de composante sectorielle et la fiche synoptique, crée une fiche Potentiel Profil de Sortie sous forme d'une fiche descriptive très détaillée et très complète, construite d'après le modèle et la structure de document suivante. Structure de document : {str(modele('Fiche Potentiel Profil de Sortie'))}"
627
+ prompt = PromptTemplate(template=template, input_variables=["question","context"])
628
+ chain = (
629
+ RunnablePassthrough.assign(
630
+ history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
631
+ )
632
+ | prompt | client_llm
 
633
  )
634
+
635
+ msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
636
+ async for chunk in chain.astream({"question":question_p,"context":context_p},
637
+ config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
638
+ await msg.stream_token(chunk)
639
+ completionFPPS = msg.content
640
+
641
  await cl.sleep(0.5)
642
  await cl.Message(
643
+ author="Datapcc : 🌐🌐🌐",content="Fiche Potentiel Profil de sortie : " + romeListArray[1] + "\n\n" + completionFPPS
644
  ).send()
645
+ cl.user_session.set("FPPS" + romeListArray[0], completionFPPS)
646
+ cl.user_session.set("contextChatBot", "Note sectorielle" + noteSectorielle + "\nFiche syoptique" + ficheSynoptique + "\nFiche Potentiel Profil de sortie" + completionFPPS)
647
  await cl.sleep(1)
648
  actions = [
649
+ cl.Action(name="download", value=completionFPPS, description="download_fiche_synoptique")
650
  ]
651
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Télécharger la fiche", actions=actions).send()
652
  await cl.sleep(1)
653
  saves = [
654
+ cl.Action(name="saveToMemory", value=completionFPPS, description="Mettre en mémoire la fiche")
655
  ]
656
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la fiche", actions=saves).send()
657
  await cl.sleep(1)
 
663
  await cl.Message(
664
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Note sectorielle ou de Fiche Synoptique!"
665
  ).send()
666
+ memory.chat_memory.add_user_message(question_p)
667
+ memory.chat_memory.add_ai_message(msg.content)
668
  return "Construction de la Fiche Potentiel Profil de Sortie"
669
 
670
  @literal_client.step(type="run")
 
796
  await cl.Message(
797
  author="Datapcc : 🌐🌐🌐",content="⛔ Vous n'avez pas encore créé de Note sectorielle!"
798
  ).send()
799
+ memory.chat_memory.add_user_message(question_p)
800
+ memory.chat_memory.add_ai_message(msg.content)
801
  return "Construction de la Fiche Synoptique"
802
 
803
  @literal_client.step(type="run")
 
828
  )
829
  | prompt | client_llm
830
  )
831
+
 
832
  msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
833
  async for chunk in chain.astream({"question":question_p,"context":context_p},
834
  config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
 
881
  await cl.Message(author="Datapcc : 🌐🌐🌐",content="Mettre en mémoire la note", actions=saves).send()
882
  await cl.sleep(2)
883
 
884
+ memory.chat_memory.add_user_message(question_p)
885
+ memory.chat_memory.add_ai_message(msg.content)
886
  return "Construction de la Note Sectorielle"
887
 
888
  @cl.step(type="run")
 
1142
  msg = cl.Message(author="Datapcc : 🌐🌐🌐",content="")
1143
  text_elements = []
1144
  answer = []
1145
+ async for chunk in runnable.astream({"question": message.content},
1146
+ config=RunnableConfig(callbacks=[cl.AsyncLangchainCallbackHandler(stream_final_answer=True)])):
1147
  await parent_step.stream_token(chunk)
1148
  await msg.stream_token(chunk)
1149