mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-15 20:06:51 +01:00
102 lines
4.0 KiB
Python
102 lines
4.0 KiB
Python
"""
|
|
Module pour collecter les informations sur les agents et leurs prompts.
|
|
Ce module permet d'extraire ces fonctionnalités de l'agent_report_generator
|
|
pour améliorer sa performance et sa maintenabilité.
|
|
"""
|
|
|
|
import logging
|
|
from typing import Dict, Any, Optional
|
|
import importlib
|
|
|
|
logger = logging.getLogger("agent_info_collector")
|
|
|
|
def collecter_info_agents(rapport_data: Dict, agent_info: Dict) -> Dict:
|
|
"""
|
|
Collecte des informations sur les agents utilisés dans l'analyse
|
|
"""
|
|
agents_info = {}
|
|
|
|
# Informations sur l'agent JSON Analyser (Ticket Analyser)
|
|
ticket_analyses = {}
|
|
for key in ["ticket_analyse", "analyse_json", "analyse_ticket"]:
|
|
if key in rapport_data and isinstance(rapport_data[key], dict) and "metadata" in rapport_data[key]:
|
|
ticket_analyses = rapport_data[key]["metadata"]
|
|
break
|
|
|
|
if ticket_analyses:
|
|
agents_info["ticket_analyser"] = ticket_analyses
|
|
|
|
# Informations sur les agents d'image
|
|
if "analyse_images" in rapport_data and rapport_data["analyse_images"]:
|
|
# Image Sorter
|
|
sorter_info = {}
|
|
analyser_info = {}
|
|
|
|
for img_path, img_data in rapport_data["analyse_images"].items():
|
|
# Collecter info du sorter
|
|
if "sorting" in img_data and isinstance(img_data["sorting"], dict) and "metadata" in img_data["sorting"]:
|
|
sorter_info = img_data["sorting"]["metadata"]
|
|
|
|
# Collecter info de l'analyser
|
|
if "analysis" in img_data and isinstance(img_data["analysis"], dict) and "metadata" in img_data["analysis"]:
|
|
analyser_info = img_data["analysis"]["metadata"]
|
|
|
|
# Une fois qu'on a trouvé les deux, on peut sortir
|
|
if sorter_info and analyser_info:
|
|
break
|
|
|
|
if sorter_info:
|
|
agents_info["image_sorter"] = sorter_info
|
|
if analyser_info:
|
|
agents_info["image_analyser"] = analyser_info
|
|
|
|
# Ajouter les informations de l'agent report generator
|
|
agents_info["report_generator"] = {
|
|
"model": agent_info.get("model", "inconnu"),
|
|
"temperature": agent_info.get("temperature", 0),
|
|
"top_p": agent_info.get("top_p", 0),
|
|
"max_tokens": agent_info.get("max_tokens", 0),
|
|
"prompt_version": agent_info.get("prompt_version", "inconnue")
|
|
}
|
|
|
|
return agents_info
|
|
|
|
def collecter_prompts_agents(system_prompt: str) -> Dict[str, str]:
|
|
"""
|
|
Collecte les prompts système de tous les agents impliqués dans l'analyse.
|
|
"""
|
|
prompts = {
|
|
"rapport_generator": system_prompt
|
|
}
|
|
|
|
# Liste des agents à importer
|
|
agents_to_import = [
|
|
("agent_ticket_analyser", "AgentTicketAnalyser"),
|
|
("agent_image_analyser", "AgentImageAnalyser"),
|
|
("agent_image_sorter", "AgentImageSorter")
|
|
]
|
|
|
|
# Importer dynamiquement chaque agent et récupérer son prompt
|
|
for module_name, class_name in agents_to_import:
|
|
try:
|
|
# Importer de façon sécurisée
|
|
full_module_name = f"agents.{module_name}"
|
|
module = importlib.import_module(full_module_name)
|
|
|
|
# Récupérer la classe
|
|
agent_class = getattr(module, class_name)
|
|
|
|
# Créer une instance temporaire en passant None comme LLM
|
|
try:
|
|
agent_instance = agent_class(None)
|
|
prompts[module_name.replace("agent_", "")] = agent_instance.system_prompt
|
|
logger.info(f"Prompt récupéré pour {module_name}")
|
|
except Exception as e:
|
|
logger.warning(f"Erreur lors de la récupération du prompt {module_name}: {str(e)}")
|
|
|
|
except ImportError as e:
|
|
logger.warning(f"Erreur lors de l'importation du module {module_name}: {str(e)}")
|
|
except AttributeError as e:
|
|
logger.warning(f"Classe {class_name} non trouvée dans le module {module_name}: {str(e)}")
|
|
|
|
return prompts |