TrondroAI / app /recommend_tool.py
Liantsoaxx08's picture
debug new functionnality 2
1d19933
Raw
History Blame Contribute Delete
2.46 kB
# 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