llm_ticket3/tests/common/agent_factory.py
2025-04-18 17:34:21 +02:00

140 lines
3.9 KiB
Python

#!/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