""" 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