datacipen commited on
Commit
52ee056
1 Parent(s): b8597f4

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +121 -54
main.py CHANGED
@@ -424,8 +424,11 @@ async def start():
424
 
425
  if chatProfile[1] == 'ROMESKILLS':
426
  contextChat = await homeRome()
 
427
  else:
428
  contextChat = await homeEsco()
 
 
429
  os.environ['HUGGINGFACEHUB_API_TOKEN'] = os.environ['HUGGINGFACEHUB_API_TOKEN']
430
  repo_id = "mistralai/Mistral-7B-Instruct-v0.3"
431
 
@@ -460,44 +463,59 @@ async def start():
460
  async def construction_NCS(competenceList):
461
  context = await contexte(competenceList)
462
  emploisST = context.to_string(index = False)
463
- romeListArray = cl.user_session.get("codeRomeArray")
464
- ficheClesMetier = await document_chiffres_cles_emplois("https://dataemploi.francetravail.fr/metier/chiffres-cles/NAT/FR/", romeListArray)
465
- contentChatBot = str(emploisST).replace('[','').replace(']','').replace('{','').replace('}','') + ficheClesMetier
466
- cl.user_session.set("contextChatBot", contentChatBot[0:28875])
467
- finals_df = context[['intitule','typeContratLibelle','experienceLibelle','competences','description','qualitesProfessionnelles','salaire','lieuTravail','formations']].copy()
468
- listEmplois = finals_df.values.tolist()
469
- stringEmplois = ''
470
- for i in range(0,len(listEmplois)):
471
- stringEmplois += "\n✔️ Emploi : " + str(listEmplois[i][0]) + ";\n◉ Contrat : " + str(listEmplois[i][1]) + ";\n◉ Compétences professionnelles : " + str(listEmplois[i][3]) + ";\n" + "◉ Salaire : " + str(listEmplois[i][6]) + ";\n◉ Qualification : " + str(listEmplois[i][5]).replace("'libelle'","\n• 'libelle") + ";\n◉ Localisation : " + str(listEmplois[i][7]) + ";\n◉ Expérience : " + str(listEmplois[i][2]) + ";\n◉ Niveau de qualification : " + str(listEmplois[i][8]) + ";\n◉ Description de l'emploi : " + str(listEmplois[i][4]) + "\n"
472
- await cl.sleep(1)
473
- listEmplois_name = f"Liste des emplois"
474
- text_elements = []
475
- text_elements.append(
476
- cl.Text(content="Question : " + competenceList + "\n\nRéponse :\n" + stringEmplois.replace('[','').replace(']','').replace('{','').replace('}','').replace("'code'","\n• 'code'"), name=listEmplois_name)
477
- )
478
- await cl.Message(author="Datapcc : 🌐🌐🌐",content="👨‍💼 Source France Travail : " + listEmplois_name, elements=text_elements).send()
479
- await cl.sleep(1)
480
- listClesMetier_name = f"Chiffres clés des emplois"
481
- text_ClesMetier = []
482
- text_ClesMetier.append(
483
- cl.Text(content="Question : " + competenceList + "\n\nRéponse :\n" + ficheClesMetier, name=listClesMetier_name)
484
- )
485
- await cl.Message(author="Datapcc : 🌐🌐🌐",content="📈 Source France Travail : " + listClesMetier_name, elements=text_ClesMetier).send()
486
- await cl.sleep(1)
487
- datavizChiffresClesMetiers = [
488
- cl.Action(name="datavizChiffresClesMetiers", value=str(romeListArray), description="Afficher la datavisualisation des chiffres clés des métiers")
489
- ]
490
- await cl.Message(author="Datapcc : 🌐🌐🌐",content="📊 Afficher la datavisualisation des chiffres clés des métiers", actions=datavizChiffresClesMetiers).send()
491
- await cl.sleep(1)
492
- codeArray = romeListArray
493
- ficheMetiers = []
494
- for i in range(0,len(codeArray)):
495
- ficheMetiers = [
496
- cl.File(name= "Fiche métier " + codeArray[i],url="https://www.soi-tc.fr/assets/fiches_pe/FEM_" + codeArray[i] + ".pdf",display="inline",)
497
  ]
498
- await cl.Message(
499
- author="Datapcc : 🌐🌐🌐", content="[Fiches métiers] 🔗", elements=ficheMetiers
500
- ).send()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
501
 
502
  await datavisualisation_statistiques_emplois(context)
503
 
@@ -509,20 +527,14 @@ async def recuperation_contexte(getNote):
509
  return getNote + " :\n" + getContext
510
  @cl.step(type="retrieval")
511
  async def contexte(competence):
512
- results = await creation_liste_code_Rome(competence)
 
 
 
513
  await cl.sleep(1)
514
  romeListArray = cl.user_session.get("codeRomeArray")
515
  df_emplois = await API_France_Travail(romeListArray)
516
- #await cl.sleep(1)
517
- #for j in range(0, len(romeListArray)):
518
- # table = await datavisualisation_chiffres_cles_emplois("https://dataemploi.pole-emploi.fr/metier/chiffres-cles/NAT/FR/" + romeListArray[j])
519
- # plot_demandeur = plotDemandeur(htmlToDataframe(table[0]), romeListArray[j])
520
- # if len(table[1]) > 0:
521
- # plot_salaire = plotSalaire(htmlToDataframe(table[1]))
522
- # plot_difficulte = plotDifficulte(htmlToDataframe(table[2]))
523
- # plot_repartitionContrat = plotRepartition(htmlToDataframe(table[3]), "Répartition des embauches du métier : type de contrat")
524
- # plot_repartitionEntreprise = plotRepartition(htmlToDataframe(table[4]), "Répartition des embauches du métier : type entreprise")
525
-
526
  return df_emplois
527
 
528
  @cl.step(type="tool")
@@ -703,16 +715,16 @@ async def API_France_Travail(romeListArray):
703
  results = []
704
  for k in romeListArray:
705
  params = {"motsCles": k,'minCreationDate': dt_to_str_iso(start_dt),'maxCreationDate': dt_to_str_iso(end_dt),'range':'0-149'}
706
- search_on_big_data = client.search(params=params)
707
- results += search_on_big_data["resultats"]
 
708
  results_df = pd.DataFrame(results)
709
  return results_df
710
 
711
  @cl.step(type="tool")
712
- async def creation_liste_code_Rome(competence):
713
- os.environ['PINECONE_API_KEYROME'] = os.environ['PINECONE_API_KEYROME']
714
  docsearch = await connexion_catalogue_Rome()
715
- retrieve_comp = docsearch.similarity_search(competence, k=30, filter={"categorie": {"$eq": os.environ['PINECONE_API_KEYROME']}})
716
  retrieve = pd.DataFrame(retrieve_comp)
717
  codeRome = []
718
  competence = []
@@ -761,7 +773,62 @@ async def creation_liste_code_Rome(competence):
761
  arrayCodeRome = stringCodeRome.split(',')
762
  else:
763
  arrayCodeRome = codeRome_list
764
- await cl.Message(author="Datapcc : 🌐🌐🌐",content="Votre ssaisie est erronée. Nous continuons l'action avec les codes Rome sélectionnés automatiquement pour vous : " + codeRome_list).send()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
765
  cl.user_session.set("codeRomeArray", arrayCodeRome)
766
 
767
  @cl.step(type="tool")
 
424
 
425
  if chatProfile[1] == 'ROMESKILLS':
426
  contextChat = await homeRome()
427
+ categorie = cl.user_session.set("categorie", os.environ['PINECONE_API_KEYROME'])
428
  else:
429
  contextChat = await homeEsco()
430
+ categorie = cl.user_session.set("categorie", os.environ['PINECONE_API_KEYESCO'])
431
+
432
  os.environ['HUGGINGFACEHUB_API_TOKEN'] = os.environ['HUGGINGFACEHUB_API_TOKEN']
433
  repo_id = "mistralai/Mistral-7B-Instruct-v0.3"
434
 
 
463
  async def construction_NCS(competenceList):
464
  context = await contexte(competenceList)
465
  emploisST = context.to_string(index = False)
466
+ if chatProfile[1] == 'ROMESKILLS':
467
+ romeListArray = cl.user_session.get("codeRomeArray")
468
+ ficheClesMetier = await document_chiffres_cles_emplois("https://dataemploi.francetravail.fr/metier/chiffres-cles/NAT/FR/", romeListArray)
469
+ contentChatBot = str(emploisST).replace('[','').replace(']','').replace('{','').replace('}','') + ficheClesMetier
470
+ finals_df = context[['intitule','typeContratLibelle','experienceLibelle','competences','description','qualitesProfessionnelles','salaire','lieuTravail','formations']].copy()
471
+ listEmplois = finals_df.values.tolist()
472
+ stringEmplois = ''
473
+ for i in range(0,len(listEmplois)):
474
+ stringEmplois += "\n✔️ Emploi : " + str(listEmplois[i][0]) + ";\n◉ Contrat : " + str(listEmplois[i][1]) + ";\n◉ Compétences professionnelles : " + str(listEmplois[i][3]) + ";\n" + "◉ Salaire : " + str(listEmplois[i][6]) + ";\n◉ Qualification : " + str(listEmplois[i][5]).replace("'libelle'","\n• 'libelle") + ";\n◉ Localisation : " + str(listEmplois[i][7]) + ";\n◉ Expérience : " + str(listEmplois[i][2]) + ";\n◉ Niveau de qualification : " + str(listEmplois[i][8]) + ";\n◉ Description de l'emploi : " + str(listEmplois[i][4]) + "\n"
475
+ await cl.sleep(1)
476
+ listEmplois_name = f"Liste des emplois"
477
+ text_elements = []
478
+ text_elements.append(
479
+ cl.Text(content="Question : " + competenceList + "\n\nRéponse :\n" + stringEmplois.replace('[','').replace(']','').replace('{','').replace('}','').replace("'code'","\n• 'code'"), name=listEmplois_name)
480
+ )
481
+ await cl.Message(author="Datapcc : 🌐🌐🌐",content="👨‍💼 Source France Travail : " + listEmplois_name, elements=text_elements).send()
482
+ await cl.sleep(1)
483
+ listClesMetier_name = f"Chiffres clés des emplois"
484
+ text_ClesMetier = []
485
+ text_ClesMetier.append(
486
+ cl.Text(content="Question : " + competenceList + "\n\nRéponse :\n" + ficheClesMetier, name=listClesMetier_name)
487
+ )
488
+ await cl.Message(author="Datapcc : 🌐🌐🌐",content="📈 Source France Travail : " + listClesMetier_name, elements=text_ClesMetier).send()
489
+ await cl.sleep(1)
490
+ datavizChiffresClesMetiers = [
491
+ cl.Action(name="datavizChiffresClesMetiers", value=str(romeListArray), description="Afficher la datavisualisation des chiffres clés des métiers")
 
 
 
 
 
 
 
 
492
  ]
493
+ await cl.Message(author="Datapcc : 🌐🌐🌐",content="📊 Afficher la datavisualisation des chiffres clés des métiers", actions=datavizChiffresClesMetiers).send()
494
+ await cl.sleep(1)
495
+ codeArray = romeListArray
496
+ ficheMetiers = []
497
+ for i in range(0,len(codeArray)):
498
+ ficheMetiers = [
499
+ cl.File(name= "Fiche métier " + codeArray[i],url="https://www.soi-tc.fr/assets/fiches_pe/FEM_" + codeArray[i] + ".pdf",display="inline",)
500
+ ]
501
+ await cl.Message(
502
+ author="Datapcc : 🌐🌐🌐", content="[Fiches métiers] 🔗", elements=ficheMetiers
503
+ ).send()
504
+ else:
505
+ contentChatBot = str(emploisST).replace('[','').replace(']','').replace('{','').replace('}','')
506
+ finals_df = context[['intitule','typeContratLibelle','experienceLibelle','competences','description','qualitesProfessionnelles','salaire','lieuTravail','formations']].copy()
507
+ listEmplois = finals_df.values.tolist()
508
+ stringEmplois = ''
509
+ for i in range(0,len(listEmplois)):
510
+ stringEmplois += "\n✔️ Emploi : " + str(listEmplois[i][0]) + ";\n◉ Contrat : " + str(listEmplois[i][1]) + ";\n◉ Compétences professionnelles : " + str(listEmplois[i][3]) + ";\n" + "◉ Salaire : " + str(listEmplois[i][6]) + ";\n◉ Qualification : " + str(listEmplois[i][5]).replace("'libelle'","\n• 'libelle") + ";\n◉ Localisation : " + str(listEmplois[i][7]) + ";\n◉ Expérience : " + str(listEmplois[i][2]) + ";\n◉ Niveau de qualification : " + str(listEmplois[i][8]) + ";\n◉ Description de l'emploi : " + str(listEmplois[i][4]) + "\n"
511
+ await cl.sleep(1)
512
+ listEmplois_name = f"Liste des emplois"
513
+ text_elements = []
514
+ text_elements.append(
515
+ cl.Text(content="Question : " + competenceList + "\n\nRéponse :\n" + stringEmplois.replace('[','').replace(']','').replace('{','').replace('}','').replace("'code'","\n• 'code'"), name=listEmplois_name)
516
+ )
517
+ await cl.Message(author="Datapcc : 🌐🌐🌐",content="👨‍💼 Source France Travail : " + listEmplois_name, elements=text_elements).send()
518
+ cl.user_session.set("contextChatBot", contentChatBot[0:28875])
519
 
520
  await datavisualisation_statistiques_emplois(context)
521
 
 
527
  return getNote + " :\n" + getContext
528
  @cl.step(type="retrieval")
529
  async def contexte(competence):
530
+ if chatProfile[1] == 'ROMESKILLS':
531
+ results = await creation_liste_code_Rome(competence, cl.user_session.get("categorie"))
532
+ else:
533
+ results = await creation_liste_skills_Esco(competence, cl.user_session.get("categorie"))
534
  await cl.sleep(1)
535
  romeListArray = cl.user_session.get("codeRomeArray")
536
  df_emplois = await API_France_Travail(romeListArray)
537
+
 
 
 
 
 
 
 
 
 
538
  return df_emplois
539
 
540
  @cl.step(type="tool")
 
715
  results = []
716
  for k in romeListArray:
717
  params = {"motsCles": k,'minCreationDate': dt_to_str_iso(start_dt),'maxCreationDate': dt_to_str_iso(end_dt),'range':'0-149'}
718
+ try:
719
+ search_on_big_data = client.search(params=params)
720
+ results += search_on_big_data["resultats"]
721
  results_df = pd.DataFrame(results)
722
  return results_df
723
 
724
  @cl.step(type="tool")
725
+ async def creation_liste_code_Rome(competence, categorie):
 
726
  docsearch = await connexion_catalogue_Rome()
727
+ retrieve_comp = docsearch.similarity_search(competence, k=30, filter={"categorie": {"$eq": categorie}})
728
  retrieve = pd.DataFrame(retrieve_comp)
729
  codeRome = []
730
  competence = []
 
773
  arrayCodeRome = stringCodeRome.split(',')
774
  else:
775
  arrayCodeRome = codeRome_list
776
+ await cl.Message(author="Datapcc : 🌐🌐🌐",content="Votre saisie est erronée. Nous continuons l'action avec les codes Rome sélectionnés automatiquement pour vous : " + codeRome_list).send()
777
+ cl.user_session.set("codeRomeArray", arrayCodeRome)
778
+
779
+ @cl.step(type="tool")
780
+ async def creation_liste_skills_Esco(competence, categorie):
781
+ docsearch = await connexion_catalogue_Rome()
782
+ retrieve_comp = docsearch.similarity_search(competence, k=40, filter={"categorie": {"$eq": categorie}})
783
+ retrieve = pd.DataFrame(retrieve_comp)
784
+ codeRome = []
785
+ competence = []
786
+ metier = []
787
+ for i in range(0,len(retrieve_comp)):
788
+ competence.append(retrieve_comp[i].metadata['compétence'])
789
+ description_competence.append(retrieve_comp[i].metadata['description_compétence'])
790
+ metier.append(retrieve_comp[i].metadata['métier'])
791
+ description_metier.append(retrieve_comp[i].metadata['description_métier'])
792
+
793
+ results_df = pd.DataFrame({'compétence': competence,'description_compétence': description_competence, 'métier': metier, 'description_métier': description_metier})
794
+ arrayresults = results_df.values.tolist()
795
+ displayresults = '| Compétence | Description Compétence | Métier | Description Métier |\n| -------- | ------- | ------- | ------- |'
796
+ for j in range(0, len(arrayresults)):
797
+ displayresults += '\n| ' + arrayresults[j][0] + ' | ' + arrayresults[j][1] + ' | ' + arrayresults[j][2] + ' | ' + arrayresults[j][3] + ' |'
798
+
799
+ await cl.Message(author="Datapcc : 🌐🌐🌐",content="Voici le résultat de la recherche sémantique sur la classification ESCO :\n" + displayresults).send()
800
+
801
+ results_df = results_df.drop_duplicates(subset=["métier"])
802
+ results_df = results_df.head(10)
803
+ codeRomeString = results_df["métier"].to_string(index = False)
804
+ codeRome_list = results_df["métier"].tolist()
805
+ actionRome = await cl.AskActionMessage(
806
+ content="Etes-vous d'accord avec la sélection des 10 métiers automatiques pour compléter la liste des compétences avec celles attendues sur le marché du travail? :\n" + codeRomeString,
807
+ actions=[
808
+ cl.Action(name="continue", value="Offres d'emploi en temps réel", label="✅ Oui, je veux continuer vers l'extraction en temps réel des offres d'emploi"),
809
+ cl.Action(name="cancel", value="Saisie des codes Rome", label="❌ Non, je veux saisir ma liste de métiers, séparés par des points-virgules"),
810
+ ], timeout=3600
811
+ ).send()
812
+ if actionRome and actionRome.get("name") == "continue":
813
+ await cl.Message(
814
+ content="Connexion à France Travail, et récupération des offres d'emploi",
815
+ ).send()
816
+ cl.user_session.set("codeRomeArray", codeRome_list)
817
+ else:
818
+ actionsaisierome = await cl.AskUserMessage(content="Saisissez vos métiers dans le prompt? ⚠️ Attention, indiquez seulement des métiers séparés par des points-virgules", timeout=3600).send()
819
+ if actionsaisierome:
820
+ await cl.Message(
821
+ content=f"Votre saisie est : {actionsaisierome['output']}",
822
+ ).send()
823
+ stringCodeRome = actionsaisierome['output']
824
+ stopWords = [';']
825
+ teststringCodeRome = [ele for ele in stopWords if(ele in stringCodeRome)]
826
+ teststringCodeRome = bool(teststringCodeRome)
827
+ if teststringCodeRome == False:
828
+ arrayCodeRome = stringCodeRome.split(';')
829
+ else:
830
+ arrayCodeRome = codeRome_list
831
+ await cl.Message(author="Datapcc : 🌐🌐🌐",content="Votre saisie est erronée. Nous continuons l'action avec les métiers sélectionnés automatiquement pour vous : " + codeRome_list).send()
832
  cl.user_session.set("codeRomeArray", arrayCodeRome)
833
 
834
  @cl.step(type="tool")