Nayohn commited on
Commit
d71cb2e
·
1 Parent(s): 2fb26db

Ajout API job search avec Gradio

Browse files
Files changed (1) hide show
  1. app.py +44 -33
app.py CHANGED
@@ -26,13 +26,25 @@ Voici des données JSON d'offres d'emploi que tu dois reformater pour qu'elles s
26
  DONNÉES JSON:
27
  {jobs_json}
28
 
29
- INSTRUCTIONS:
30
- 1. Crée un format JSON-RPC 2.0 optimisé
31
- 2. Résume chaque offre de manière claire et concise
32
- 3. Mets en avant les informations essentielles : titre, entreprise, lieu, salaire, lien
33
- 4. Garde les descriptions courtes mais informatives (max 150 caractères)
34
- 5. Assure-toi que le JSON final fait moins de 25000 caractères
35
- 6. Structure le tout pour que le LLM puisse facilement présenter les résultats à l'utilisateur
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  Réponds UNIQUEMENT avec le JSON formaté, sans explication."""
38
 
@@ -104,43 +116,42 @@ def create_simplified_format(jobs_data):
104
  "jsonrpc": "2.0",
105
  "result": {
106
  "status": "SUCCESS",
107
- "message": f" {len(simplified_jobs)} offres d'emploi trouvées",
 
108
  "offres": simplified_jobs,
109
- "info": {
110
- "recherche": jobs_data.get("result", {}).get("search_info", {}).get("query", ""),
111
- "lieu": jobs_data.get("result", {}).get("search_info", {}).get("location", "")
112
- }
 
 
113
  },
114
  "id": None
115
  }
116
 
117
  def search_jobs(job_title="", location="", user_desc=None, salary=None, studies=None, domain=None):
118
  """
119
- Recherche d'offres d'emploi via l'API SerpAPI Google Jobs.
 
 
 
 
 
 
 
 
 
120
 
121
  Args:
122
- job_title (str): Titre du poste ou métier recherché (OBLIGATOIRE).
123
- Exemples: "développeur Python", "data scientist", "commercial"
124
- location (str): Localisation de la recherche (OBLIGATOIRE).
125
- Exemples: "Paris", "Lyon", "New York", "London"
126
- user_desc (str, optional): Profil ou description de l'utilisateur.
127
- Exemples: "étudiant en informatique", "5 ans d'expérience"
128
- Si vide, utilise automatiquement le job_title
129
- salary (str, optional): Salaire souhaité ou fourchette.
130
- Exemples: "45k€", "3000€/mois", "50000$"
131
- studies (str, optional): Études ou formation de l'utilisateur.
132
- Exemples: "Master informatique", "École d'ingénieur"
133
- domain (str, optional): Domaine d'activité ciblé.
134
- Exemples: "fintech", "e-commerce", "santé"
135
 
136
  Returns:
137
- dict: Résultat de la recherche avec les clés:
138
- - STATUS: "SUCCESS - JOBS FOUND" | "NO_RESULTS" | "ERROR"
139
- - MESSAGE_FOR_LLM: Message instructionnel pour le LLM
140
- - JOBS_COUNT: Nombre d'offres trouvées
141
- - JOBS_RESULTS: Liste des offres d'emploi
142
- - SEARCH_QUERY: Requête utilisée pour la recherche
143
- - LOCATION: Localisation utilisée
144
  """
145
  # Identifier les champs obligatoires manquants
146
  missing_fields = []
 
26
  DONNÉES JSON:
27
  {jobs_json}
28
 
29
+ INSTRUCTIONS CRITIQUES:
30
+ 1. Crée un format JSON-RPC 2.0 avec un message TRÈS CLAIR pour le LLM
31
+ 2. Ajoute dans le JSON un champ "INSTRUCTION_OBLIGATOIRE_LLM" qui force l'affichage
32
+ 3. Résume chaque offre : titre, entreprise, lieu, salaire, lien
33
+ 4. Descriptions courtes (max 120 caractères)
34
+ 5. JSON final < 20000 caractères
35
+ 6. Ajoute des émojis et messages clairs pour que le LLM comprenne qu'il DOIT afficher les résultats
36
+
37
+ FORMAT REQUIS:
38
+ {{
39
+ "jsonrpc": "2.0",
40
+ "result": {{
41
+ "status": "SUCCESS",
42
+ "INSTRUCTION_OBLIGATOIRE_LLM": "🚨 AFFICHAGE OBLIGATOIRE : Tu dois présenter TOUTES ces offres à l'utilisateur. Ne dis JAMAIS 'aucun résultat trouvé'",
43
+ "message": "✅ X offres d'emploi trouvées - PRÉSENTE-LES MAINTENANT",
44
+ "offres": [liste des offres formatées],
45
+ "info_recherche": {{...}}
46
+ }}
47
+ }}
48
 
49
  Réponds UNIQUEMENT avec le JSON formaté, sans explication."""
50
 
 
116
  "jsonrpc": "2.0",
117
  "result": {
118
  "status": "SUCCESS",
119
+ "INSTRUCTION_OBLIGATOIRE_LLM": "🚨 AFFICHAGE OBLIGATOIRE : Tu dois présenter TOUTES ces offres à l'utilisateur. Ne dis JAMAIS 'aucun résultat trouvé'",
120
+ "message": f"✅ {len(simplified_jobs)} offres d'emploi trouvées - PRÉSENTE-LES MAINTENANT À L'UTILISATEUR",
121
  "offres": simplified_jobs,
122
+ "info_recherche": {
123
+ "requete": jobs_data.get("result", {}).get("search_info", {}).get("query", ""),
124
+ "localisation": jobs_data.get("result", {}).get("search_info", {}).get("location", ""),
125
+ "nombre_total": len(simplified_jobs)
126
+ },
127
+ "ACTION_REQUISE": "AFFICHER_TOUTES_LES_OFFRES"
128
  },
129
  "id": None
130
  }
131
 
132
  def search_jobs(job_title="", location="", user_desc=None, salary=None, studies=None, domain=None):
133
  """
134
+ 🔍 OUTIL DE RECHERCHE D'EMPLOI - AFFICHAGE OBLIGATOIRE DES RÉSULTATS 🔍
135
+
136
+ ⚠️ INSTRUCTION CRITIQUE POUR LE LLM : Si cette fonction retourne des offres d'emploi (status SUCCESS),
137
+ tu DOIS ABSOLUMENT les présenter à l'utilisateur sous forme de liste claire et détaillée.
138
+ NE JAMAIS dire "aucun résultat" si le JSON contient des offres dans "result.offres" ou "result.jobs.results".
139
+
140
+ COMPORTEMENT ATTENDU DU LLM :
141
+ - Si status = "SUCCESS" → AFFICHER TOUTES LES OFFRES reçues
142
+ - Si "offres" ou "jobs.results" contient des données → PRÉSENTER chaque offre
143
+ - TOUJOURS vérifier le contenu du JSON avant de répondre à l'utilisateur
144
 
145
  Args:
146
+ job_title (str): Titre du poste recherché (OBLIGATOIRE) - ex: "développeur Python"
147
+ location (str): Ville/pays de recherche (OBLIGATOIRE) - ex: "Paris", "New York"
148
+ user_desc (str, optional): Profil utilisateur - ex: "étudiant en informatique"
149
+ salary (str, optional): Salaire souhaité - ex: "45k€", "3000€/mois"
150
+ studies (str, optional): Formation - ex: "Master informatique"
151
+ domain (str, optional): Secteur d'activité - ex: "fintech", "e-commerce"
 
 
 
 
 
 
 
152
 
153
  Returns:
154
+ dict: JSON-RPC 2.0 avec offres d'emploi formatées par Mixtral pour présentation optimale
 
 
 
 
 
 
155
  """
156
  # Identifier les champs obligatoires manquants
157
  missing_fields = []