Spaces:
Runtime error
Runtime error
| # app/recommend_tool.py | |
| import json | |
| from typing import Dict, Any | |
| from langchain.prompts import PromptTemplate | |
| from langchain.agents import Tool | |
| from app.llm_client import LLMClient | |
| class RecommendTool: | |
| """ | |
| Classe pour recommander les valeurs manquantes dans un schéma piscicole. | |
| Prend en compte toutes les clés potentiellement incomplètes et génère | |
| un JSON complet via un modèle LLM. | |
| """ | |
| def __init__(self, llm_client: LLMClient): | |
| # Template dynamique pour remplir tous les champs manquants | |
| template = ''' | |
| Vous êtes un expert en pisciculture. | |
| Voici les données actuelles (JSON) pour un élevage piscicole : | |
| {data_json} | |
| Complétez **tous** les champs manquants ou vides dans ce JSON en tenant compte des informations présentes. | |
| Les clés à vérifier et compléter sont : | |
| - "poisson" (espèce) | |
| - "type_elevage" (e.g. hors sol, avec sol, etc.) | |
| - "norme" (intensif, semi-intensif, extensif) | |
| - "aliment"( type de nourriture recommandé selon le poids du poisson le long de sa croissance) | |
| - "temperature" (idéal en °C) | |
| - "pH" (valeur optimale) | |
| - "durée_d_elevage" (durée en jours) | |
| - "poids" (poids moyen en grammes (g) à l'âge adulte ou à la récolte) | |
| Renvoyez **uniquement** un JSON valide, complet, sans explications textuelles. | |
| ''' | |
| self.prompt = PromptTemplate( | |
| input_variables=["data_json"], | |
| template=template | |
| ) | |
| self.llm = llm_client | |
| # Exposition de l'outil LangChain | |
| self.tool = Tool( | |
| name="recommend_missing", | |
| func=self._run, | |
| description=( | |
| "Remplit tous les champs manquants d'un schéma piscicole donné" | |
| "en JSON string." | |
| ) | |
| ) | |
| def _run(self, data_str: str) -> str: | |
| """ | |
| - Désérialise la chaîne JSON en dict | |
| - Génère un prompt complet pour le LLM | |
| - Renvoie la sortie brute du LLM (JSON string) | |
| """ | |
| try: | |
| data = json.loads(data_str) | |
| except json.JSONDecodeError: | |
| return json.dumps({"error": "Malformed JSON input."}) | |
| # Reconstruire le JSON d'entrée pour le prompt | |
| data_json = json.dumps(data, ensure_ascii=False) | |
| merged_prompt = self.prompt.format(data_json=data_json) | |
| # Appel au LLM pour obtenir le JSON complété | |
| completion = self.llm.invoke(merged_prompt) | |
| return completion | |