Ludovicollin commited on
Commit
1c94c98
·
verified ·
1 Parent(s): d6149f2

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +126 -2
main.py CHANGED
@@ -39,6 +39,7 @@ import bcrypt
39
  import json
40
  import requests
41
  import http.client
 
42
  from literalai import LiteralClient
43
  literal_client = LiteralClient(api_key=os.getenv("LITERAL_API_KEY"))
44
  literal_client.instrument_openai()
@@ -72,6 +73,11 @@ def process_file(file: AskFileResponse):
72
  docs = text_splitter.split_documents(documents)
73
  return docs
74
 
 
 
 
 
 
75
  def modele(document):
76
  match document:
77
  case "Note de composante sectorielle":
@@ -838,7 +844,8 @@ async def contexte(romeListArray):
838
  emplois.append("\nEmploi : " + results[i]['intitule'] + "; Contrat : " + results[i]['typeContrat'] + "; Compétences professionnelles : " + arrayToString(results[i]['competences']) if listToString(results[i]).find("'competences':")!=-1 else "; " + "Salaire : " + listToString(results[i]['salaire']) + "; Qualification : " + results[i]['qualificationLibelle'] if listToString(results[i]).find("'qualificationLibelle':")!=-1 else "; " + "; Localisation : " + listToString(results[i]['lieuTravail']) + "; Entreprise : " + listToString(results[i]['entreprise']['nom']) if listToString(results[i]['entreprise']).find("'nom':")!=-1 else "; ")
839
  emplois_list = ''.join(emplois)
840
  context = emplois_list.replace('[','').replace(']','').replace('{','').replace('}','')
841
- ficheMetier = await Fiche_metier("https://candidat.francetravail.fr/marche-du-travail/fichemetierrome.blocficherome.telechargerpdf?codeRome=", romeListArray[0])
 
842
  ficheMetiersCompetencesSavoirs = await Fiche_metier_competences_savoirs(romeListArray[0])
843
  metierSecteurContexteTravail = await Metier_secteur_contexte_travail(romeListArray[0])
844
  cl.user_session.set("EmploiST", context)
@@ -847,7 +854,7 @@ async def contexte(romeListArray):
847
  #statsMarcheTravailEmbauche = await Statistiques_marche_travail("STATS_EMBAUCHES",romeListArray[0],index)
848
  #return "Fiche métier Compétences Savoirs :\n" + ficheMetiersCompetencesSavoirs + "\n\nMetier secteur contexte au travail :\n" + metierSecteurContexteTravail + "\n\nStatistiques du marché du travail : offres d'emploi :\n" + statsMarcheTravailOffre + "\n\nStatistiques du marché du travail : demandeurs d'emploi :\n" + statsMarcheTravailDemandeur + "\n\nStatistiques du marché du travail : perspectives d'embauche:\n" + statsMarcheTravailEmbauche + "\n\nListe des emplois issus de France Travail :\n" + context
849
  #return "Liste des emplois issus de France Travail :\n" + context
850
- return "Fiche métier Compétences Savoirs :\n" + ficheMetiersCompetencesSavoirs + "\n\nMetier secteur contexte au travail :\n" + metierSecteurContexteTravail + "\n\nListe des emplois issus de France Travail :\n" + context
851
 
852
  @cl.step(type="tool")
853
  async def Statistiques_marche_travail(categorie,rome,index):
@@ -952,6 +959,123 @@ async def Fiche_metier_competences_savoirs(codes):
952
  datas = data.decode("utf-8")
953
  dataset += str(datas.replace('"','').replace('{','').replace('}','').replace('[','').replace(']','').replace('code','').replace('libelle','').replace(',:',', ').replace('::',':'))
954
  return dataset
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
955
  @cl.step(type="tool")
956
  async def Fiche_metier(url, codes):
957
  docs = []
 
39
  import json
40
  import requests
41
  import http.client
42
+ from bs4 import BeautifulSoup
43
  from literalai import LiteralClient
44
  literal_client = LiteralClient(api_key=os.getenv("LITERAL_API_KEY"))
45
  literal_client.instrument_openai()
 
73
  docs = text_splitter.split_documents(documents)
74
  return docs
75
 
76
+ def removeTags(all):
77
+ for data in all(['style', 'script']):
78
+ data.decompose()
79
+ return ' '.join(all.stripped_strings)
80
+
81
  def modele(document):
82
  match document:
83
  case "Note de composante sectorielle":
 
844
  emplois.append("\nEmploi : " + results[i]['intitule'] + "; Contrat : " + results[i]['typeContrat'] + "; Compétences professionnelles : " + arrayToString(results[i]['competences']) if listToString(results[i]).find("'competences':")!=-1 else "; " + "Salaire : " + listToString(results[i]['salaire']) + "; Qualification : " + results[i]['qualificationLibelle'] if listToString(results[i]).find("'qualificationLibelle':")!=-1 else "; " + "; Localisation : " + listToString(results[i]['lieuTravail']) + "; Entreprise : " + listToString(results[i]['entreprise']['nom']) if listToString(results[i]['entreprise']).find("'nom':")!=-1 else "; ")
845
  emplois_list = ''.join(emplois)
846
  context = emplois_list.replace('[','').replace(']','').replace('{','').replace('}','')
847
+ ficheMetier = await FicheMetier("https://candidat.francetravail.fr/metierscope/fiche-metier/", romeListArray[0])
848
+ ficheClesMetier = await ChiffresClesMetier("https://dataemploi.pole-emploi.fr/metier/chiffres-cles/NAT/FR/", romeListArray[0])
849
  ficheMetiersCompetencesSavoirs = await Fiche_metier_competences_savoirs(romeListArray[0])
850
  metierSecteurContexteTravail = await Metier_secteur_contexte_travail(romeListArray[0])
851
  cl.user_session.set("EmploiST", context)
 
854
  #statsMarcheTravailEmbauche = await Statistiques_marche_travail("STATS_EMBAUCHES",romeListArray[0],index)
855
  #return "Fiche métier Compétences Savoirs :\n" + ficheMetiersCompetencesSavoirs + "\n\nMetier secteur contexte au travail :\n" + metierSecteurContexteTravail + "\n\nStatistiques du marché du travail : offres d'emploi :\n" + statsMarcheTravailOffre + "\n\nStatistiques du marché du travail : demandeurs d'emploi :\n" + statsMarcheTravailDemandeur + "\n\nStatistiques du marché du travail : perspectives d'embauche:\n" + statsMarcheTravailEmbauche + "\n\nListe des emplois issus de France Travail :\n" + context
856
  #return "Liste des emplois issus de France Travail :\n" + context
857
+ return "Fiche Métier:\n" + ficheMetier + "\n\nFiche métier Compétences Savoirs :\n" + ficheMetiersCompetencesSavoirs + "\n\nMetier secteur contexte au travail :\n" + metierSecteurContexteTravail + "\n\nChiffres clés Métier :\n" + ficheClesMetier + "\n\nListe des emplois issus de France Travail :\n" + context
858
 
859
  @cl.step(type="tool")
860
  async def Statistiques_marche_travail(categorie,rome,index):
 
959
  datas = data.decode("utf-8")
960
  dataset += str(datas.replace('"','').replace('{','').replace('}','').replace('[','').replace(']','').replace('code','').replace('libelle','').replace(',:',', ').replace('::',':'))
961
  return dataset
962
+
963
+ @cl.step(type="tool")
964
+ async def FicheMetier(url, codes):
965
+ if codes.find(',') != -1:
966
+ all = ""
967
+ codeArray = codes.split(',')
968
+ for i in range(0,len(codeArray)):
969
+ response = requests.get(url + codeArray[i])
970
+ soup = BeautifulSoup(response.text, "html.parser")
971
+ allmissions = soup.select('div.fm-presentation-text')
972
+ allcompetences = soup.select('div#part2')
973
+ allcontextes = soup.select('div#part3')
974
+ all = all + "Fiche Métier " + codeArray[i] + ":\nLes missions principales : " + removeTags(allmissions[0]) + ". Les compétences recherchées : " + removeTags(allcompetences[0]) + ". Les contextes au travail : " + removeTags(allcontextes[0]) + "."
975
+ else:
976
+ response = requests.get(url + codes)
977
+ soup = BeautifulSoup(response.text, "html.parser")
978
+ allmissions = soup.select('div.fm-presentation-text')
979
+ allcompetences = soup.select('div#part2')
980
+ allcontextes = soup.select('div#part3')
981
+ all = "Fiche Métier " + codes + ":\nLes missions principales : " + removeTags(allmissions[0]) + ". Les compétences recherchées : " + removeTags(allcompetences[0]) + ". Les contextes au travail : " + removeTags(allcontextes[0]) + "."
982
+ return all
983
+
984
+ @cl.step(type="tool")
985
+ async def ChiffresClesMetier(url, codes):
986
+ if codes.find(',') != -1:
987
+ all = ""
988
+ codeArray = codes.split(',')
989
+ for i in range(0,len(codeArray)):
990
+ response = requests.get(url + codeArray[i])
991
+ soup = BeautifulSoup(response.text, "html.parser")
992
+ if soup.select('h1#titreMetier'):
993
+ alltitre = soup.select('h1#titreMetier')
994
+ allTitre = removeTags(alltitre[0])
995
+ else:
996
+ allTitre = ""
997
+ if soup.select('div.jobs_item-container-flex'):
998
+ allembauches = soup.select('div.jobs_item-container-flex')
999
+ allEmbauches = removeTags(allembauches[0])
1000
+ else:
1001
+ allEmbauches = ""
1002
+ if soup.select('div.key-number_block.shadow.inset'):
1003
+ allsalaires = soup.select('div.key-number_block.shadow.inset')
1004
+ allSalaires = removeTags(allsalaires[0])
1005
+ else:
1006
+ allSalaires = ""
1007
+ if soup.select('tbody.sectorTable__body'):
1008
+ allsalairesMedian = soup.select('tbody.sectorTable__body')
1009
+ allSalairesMedian = removeTags(allsalairesMedian[0])
1010
+ else:
1011
+ allSalairesMedian = ""
1012
+ if soup.select('div.dynamism_canvas-wrapper > p.sr-only'):
1013
+ allDiff = soup.select('div.dynamism_canvas-wrapper > p.sr-only')
1014
+ alldiff = removeTags(allDiff[0])
1015
+ else:
1016
+ alldiff = ""
1017
+ if soup.select('div.tabs-main-data_persp-col2'):
1018
+ allDiffOrigin = soup.select('div.tabs-main-data_persp-col2')
1019
+ alldiffOrigin = removeTags(allDiffOrigin[0])
1020
+ else:
1021
+ alldiffOrigin = ""
1022
+ allTypeContrat = ""
1023
+ if soup.find_all("div", class_="hiring-contract_legende_item ng-star-inserted"):
1024
+ allContrat = soup.find_all("div", class_="hiring-contract_legende_item ng-star-inserted")
1025
+ for j in range(0,len(allContrat)):
1026
+ allTypeContrat = allTypeContrat + removeTags(allContrat[j]) + ", "
1027
+ if soup.find_all("div", class_="horizontal-graph_patterns"):
1028
+ allEntreprise = soup.find_all("div", class_="horizontal-graph_patterns")
1029
+ allentreprise = removeTags(allEntreprise[0])
1030
+ else:
1031
+ allentreprise = ""
1032
+ all = "\n\nChiffres-clés Métier " + allTitre + ":\nDemandeurs d'emploi et Offres d'emploi : " + allEmbauches + ". Salaires proposés dans les offres : " + allSalaires + ". Salaires médians constatés : " + allSalairesMedian + ". Difficultés de recrutement pour les entreprises : " + alldiff + ". Origine des difficultés : " + alldiffOrigin + ". Répartition des embauches par type de contrat : " + allTypeContrat + ". Répartition des embauches par taille d'entreprise : " + allentreprise + "."
1033
+ else:
1034
+ response = requests.get(url + codes)
1035
+ soup = BeautifulSoup(response.text, "html.parser")
1036
+ if soup.select('h1#titreMetier'):
1037
+ alltitre = soup.select('h1#titreMetier')
1038
+ allTitre = removeTags(alltitre[0])
1039
+ else:
1040
+ allTitre = ""
1041
+ if soup.select('div.jobs_item-container-flex'):
1042
+ allembauches = soup.select('div.jobs_item-container-flex')
1043
+ allEmbauches = removeTags(allembauches[0])
1044
+ else:
1045
+ allEmbauches = ""
1046
+ if soup.select('div.key-number_block.shadow.inset'):
1047
+ allsalaires = soup.select('div.key-number_block.shadow.inset')
1048
+ allSalaires = removeTags(allsalaires[0])
1049
+ else:
1050
+ allSalaires = ""
1051
+ if soup.select('tbody.sectorTable__body'):
1052
+ allsalairesMedian = soup.select('tbody.sectorTable__body')
1053
+ allSalairesMedian = removeTags(allsalairesMedian[0])
1054
+ else:
1055
+ allSalairesMedian = ""
1056
+ if soup.select('div.dynamism_canvas-wrapper > p.sr-only'):
1057
+ allDiff = soup.select('div.dynamism_canvas-wrapper > p.sr-only')
1058
+ alldiff = removeTags(allDiff[0])
1059
+ else:
1060
+ alldiff = ""
1061
+ if soup.select('div.tabs-main-data_persp-col2'):
1062
+ allDiffOrigin = soup.select('div.tabs-main-data_persp-col2')
1063
+ alldiffOrigin = removeTags(allDiffOrigin[0])
1064
+ else:
1065
+ alldiffOrigin = ""
1066
+ allTypeContrat = ""
1067
+ if soup.find_all("div", class_="hiring-contract_legende_item ng-star-inserted"):
1068
+ allContrat = soup.find_all("div", class_="hiring-contract_legende_item ng-star-inserted")
1069
+ for j in range(0,len(allContrat)):
1070
+ allTypeContrat = allTypeContrat + removeTags(allContrat[j]) + ", "
1071
+ if soup.find_all("div", class_="horizontal-graph_patterns"):
1072
+ allEntreprise = soup.find_all("div", class_="horizontal-graph_patterns")
1073
+ allentreprise = removeTags(allEntreprise[0])
1074
+ else:
1075
+ allentreprise = ""
1076
+ all = "\n\nChiffres-clés Métier " + allTitre + ":\nDemandeurs d'emploi et Offres d'emploi : " + allEmbauches + ". Salaires proposés dans les offres : " + allSalaires + ". Salaires médians constatés : " + allSalairesMedian + ". Difficultés de recrutement pour les entreprises : " + alldiff + ". Origine des difficultés : " + alldiffOrigin + ". Répartition des embauches par type de contrat : " + allTypeContrat + ". Répartition des embauches par taille d'entreprise : " + allentreprise + "."
1077
+ return all
1078
+
1079
  @cl.step(type="tool")
1080
  async def Fiche_metier(url, codes):
1081
  docs = []