Spaces:
Running
Running
Update main.py
Browse files
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
|
|
|
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 = []
|