Sahm269 commited on
Commit
f6c016d
·
verified ·
1 Parent(s): bb9a231

Upload mistralapi.py

Browse files
Files changed (1) hide show
  1. server/mistral/mistralapi.py +65 -17
server/mistral/mistralapi.py CHANGED
@@ -8,7 +8,7 @@ import pandas as pd
8
 
9
  import tiktoken
10
 
11
- from typing import List
12
 
13
 
14
  class MistralAPI:
@@ -322,16 +322,17 @@ class MistralAPI:
322
  print(f"❌ Erreur lors de l'extraction des recettes : {e}")
323
  return []
324
 
325
- def extract_recipe_title(self, text: str, temperature: float = 0.3) -> str:
 
326
  """
327
- Extrait uniquement le titre d'une recette à partir d'une réponse complète du chatbot.
328
 
329
  Args:
330
- text (str): La réponse complète contenant une recette.
331
- temperature (float, optional): Paramètre de créativité du modèle. Défaut : 0.3.
332
 
333
  Returns:
334
- str: Le titre résumé de la recette.
335
  """
336
  try:
337
  chat_response = self.client.chat.complete(
@@ -340,24 +341,71 @@ class MistralAPI:
340
  messages=[
341
  {
342
  "role": "system",
343
- "content": "Tu es un assistant qui extrait uniquement le titre d'une recette à partir d'un texte. "
344
- "Renvoie uniquement le titre en quelques mots, sans aucune autre information.",
 
 
 
 
345
  },
346
  {"role": "user", "content": text,},
347
  ],
348
  )
349
 
350
- title = chat_response.choices[0].message.content.strip()
351
-
352
- # 🔹 Vérification de la longueur pour éviter les réponses trop longues
353
- if len(title) > 50: # Limite à 50 caractères (ajustable)
354
- title = title[:47] + "..." # Tronquer proprement
355
-
356
- return title
 
 
 
 
 
357
 
358
  except Exception as e:
359
- print(f"❌ Erreur lors de l'extraction du titre de la recette : {e}")
360
- return "Recette inconnue"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
 
362
  def count_tokens(self, text: str) -> int:
363
  """
 
8
 
9
  import tiktoken
10
 
11
+ from typing import List, Dict
12
 
13
 
14
  class MistralAPI:
 
322
  print(f"❌ Erreur lors de l'extraction des recettes : {e}")
323
  return []
324
 
325
+
326
+ def extract_recipes_and_ingredients(self, text: str, temperature: float = 0.3) -> List[Dict[str, str]]:
327
  """
328
+ Extrait les titres et les ingrédients des recettes à partir d'un texte donné.
329
 
330
  Args:
331
+ text (str): La réponse contenant une ou plusieurs recettes.
332
+ temperature (float, optional): Niveau de créativité du modèle. Défaut : 0.3.
333
 
334
  Returns:
335
+ List[Dict[str, str]]: Une liste de dictionnaires contenant les titres et les ingrédients des recettes.
336
  """
337
  try:
338
  chat_response = self.client.chat.complete(
 
341
  messages=[
342
  {
343
  "role": "system",
344
+ "content": (
345
+ "Tu es un assistant qui extrait uniquement les informations de recettes depuis un texte donné. "
346
+ "Réponds avec une liste de recettes où chaque entrée contient un titre et une liste d'ingrédients. "
347
+ "Le format doit être : 'Titre: [Nom de la recette], Ingrédients: [liste des ingrédients]'. "
348
+ "Ne donne aucune autre information."
349
+ ),
350
  },
351
  {"role": "user", "content": text,},
352
  ],
353
  )
354
 
355
+ extracted_text = chat_response.choices[0].message.content.strip()
356
+
357
+ # 🔹 Extraction des recettes sous forme de dictionnaire
358
+ recipes = []
359
+ for line in extracted_text.split("\n"):
360
+ if "Titre:" in line and "Ingrédients:" in line:
361
+ parts = line.split("Ingrédients:")
362
+ title = parts[0].replace("Titre:", "").strip()
363
+ ingredients = parts[1].strip()
364
+ recipes.append({"titre": title, "ingredients": ingredients})
365
+
366
+ return recipes
367
 
368
  except Exception as e:
369
+ print(f"❌ Erreur lors de l'extraction des recettes : {e}")
370
+ return []
371
+
372
+
373
+ # def extract_recipe_title(self, text: str, temperature: float = 0.3) -> str:
374
+ # """
375
+ # Extrait uniquement le titre d'une recette à partir d'une réponse complète du chatbot.
376
+
377
+ # Args:
378
+ # text (str): La réponse complète contenant une recette.
379
+ # temperature (float, optional): Paramètre de créativité du modèle. Défaut : 0.3.
380
+
381
+ # Returns:
382
+ # str: Le titre résumé de la recette.
383
+ # """
384
+ # try:
385
+ # chat_response = self.client.chat.complete(
386
+ # model=self.model,
387
+ # temperature=temperature,
388
+ # messages=[
389
+ # {
390
+ # "role": "system",
391
+ # "content": "Tu es un assistant qui extrait uniquement le titre d'une recette à partir d'un texte. "
392
+ # "Renvoie uniquement le titre en quelques mots, sans aucune autre information.",
393
+ # },
394
+ # {"role": "user", "content": text,},
395
+ # ],
396
+ # )
397
+
398
+ # title = chat_response.choices[0].message.content.strip()
399
+
400
+ # # 🔹 Vérification de la longueur pour éviter les réponses trop longues
401
+ # if len(title) > 50: # Limite à 50 caractères (ajustable)
402
+ # title = title[:47] + "..." # Tronquer proprement
403
+
404
+ # return title
405
+
406
+ # except Exception as e:
407
+ # print(f"❌ Erreur lors de l'extraction du titre de la recette : {e}")
408
+ # return "Recette inconnue"
409
 
410
  def count_tokens(self, text: str) -> int:
411
  """