#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Factory pour les agents LLM utilisés dans les tests. Centralise l'initialisation des agents pour éviter la duplication de code. """ import logging import time from typing import Dict, Any, Optional, List, Tuple, Union # Import des agents disponibles from agents.mistral_large.agent_ticket_analyser import AgentTicketAnalyser from agents.pixtral_large.agent_image_sorter import AgentImageSorter from agents.pixtral_large.agent_image_analyser import AgentImageAnalyser from agents.mistral_large.agent_report_generator import AgentReportGenerator # Import de la factory LLM from tests.common.llm_factory import create_llm, get_best_text_model, get_best_vision_model logger = logging.getLogger("AgentFactory") def create_ticket_analyser(llm=None): """ Crée un agent d'analyse de tickets. Args: llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle texte disponible) Returns: Agent d'analyse de tickets """ if llm is None: llm = get_best_text_model() logger.info("Création de l'agent d'analyse de tickets") start_time = time.time() agent = AgentTicketAnalyser(llm) init_time = time.time() - start_time logger.info(f"Agent d'analyse de tickets créé en {init_time:.2f} secondes") return agent def create_image_sorter(llm=None): """ Crée un agent de tri d'images. Args: llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle vision disponible) Returns: Agent de tri d'images """ if llm is None: llm = get_best_vision_model() logger.info("Création de l'agent de tri d'images") start_time = time.time() agent = AgentImageSorter(llm) init_time = time.time() - start_time logger.info(f"Agent de tri d'images créé en {init_time:.2f} secondes") return agent def create_image_analyser(llm=None): """ Crée un agent d'analyse d'images. Args: llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle vision disponible) Returns: Agent d'analyse d'images """ if llm is None: llm = get_best_vision_model() logger.info("Création de l'agent d'analyse d'images") start_time = time.time() agent = AgentImageAnalyser(llm) init_time = time.time() - start_time logger.info(f"Agent d'analyse d'images créé en {init_time:.2f} secondes") return agent def create_report_generator(llm=None): """ Crée un agent de génération de rapports. Args: llm: Instance du modèle LLM à utiliser (si None, utilise le meilleur modèle texte disponible) Returns: Agent de génération de rapports """ if llm is None: llm = get_best_text_model() logger.info("Création de l'agent de génération de rapports") start_time = time.time() agent = AgentReportGenerator(llm) init_time = time.time() - start_time logger.info(f"Agent de génération de rapports créé en {init_time:.2f} secondes") return agent def create_all_agents(text_llm=None, vision_llm=None) -> Dict[str, Any]: """ Crée tous les agents nécessaires. Args: text_llm: Modèle LLM pour les agents texte vision_llm: Modèle LLM pour les agents vision Returns: Dictionnaire contenant tous les agents """ if text_llm is None: text_llm = get_best_text_model() if vision_llm is None: vision_llm = get_best_vision_model() agents = { "ticket_analyser": create_ticket_analyser(text_llm), "image_sorter": create_image_sorter(vision_llm), "image_analyser": create_image_analyser(vision_llm), "report_generator": create_report_generator(text_llm) } return agents