llm_ticket3/main_llama.py

127 lines
5.6 KiB
Python

"""Point d'entrée principal pour l'analyse d'un ticket de support en utilisant exclusivement LlamaVision."""
import os
import sys
import argparse
import logging
import json
from typing import Dict, Any
from agent_factory_llama import AgentFactoryLlamaVision, DEFAULT_MODEL_NAME
from orchestrator_llama import OrchestratorLlamaVision
from agents.utils.report_csv_exporter import traiter_rapports_ticket
# Configuration du logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(),
logging.FileHandler('main_llama.log')
])
logger = logging.getLogger("MainLlamaVision")
def parse_arguments():
parser = argparse.ArgumentParser(description="Analyse complète d'un ticket avec LlamaVision.")
parser.add_argument("ticket_id", help="ID du ticket à analyser (ex: T1234)")
parser.add_argument("--output_dir", default="output", help="Répertoire de sortie (par défaut: output)")
# Paramètre pour définir le modèle LlamaVision à utiliser
parser.add_argument("--model", default=DEFAULT_MODEL_NAME,
help=f"Modèle LlamaVision à utiliser (par défaut: {DEFAULT_MODEL_NAME})")
# Options de configuration
parser.add_argument("--no-dedup", action="store_true", help="Désactiver le préfiltrage des doublons d'images")
parser.add_argument("--seuil", type=int, default=5, help="Seuil de similarité pour la déduplication (0-10)")
parser.add_argument("--save-results", action="store_true", help="Sauvegarder les résultats intermédiaires")
parser.add_argument("--debug", action="store_true", help="Activer le mode debug")
parser.add_argument("--reports-dir", default="reports", help="Répertoire de sauvegarde des rapports")
# Options OCR et traduction
parser.add_argument("--no-ocr", action="store_true", help="Désactiver l'OCR sur les images")
parser.add_argument("--no-english", action="store_true", help="Utiliser la langue originale au lieu de l'anglais")
# Etapes facultatives
parser.add_argument("--skip-ticket-analysis", action="store_true", help="Sauter l'analyse du ticket")
parser.add_argument("--skip-image-sorting", action="store_true", help="Sauter le tri d'images")
parser.add_argument("--skip-image-analysis", action="store_true", help="Sauter l'analyse des images")
parser.add_argument("--skip-report", action="store_true", help="Sauter la génération du rapport")
return parser.parse_args()
def main():
"""Fonction principale pour l'analyse des tickets de support avec LlamaVision."""
args = parse_arguments()
# Configuration du niveau de log
if args.debug:
logging.getLogger().setLevel(logging.DEBUG)
logger.debug("Mode debug activé")
# Configuration de l'orchestrateur
config = {
"dedup_enabled": not args.no_dedup,
"dedup_threshold": args.seuil,
"save_results": args.save_results,
"debug_mode": args.debug,
"reports_dir": args.reports_dir,
"ocr_enabled": not args.no_ocr,
"english_only": not args.no_english,
"model_name": args.model # Ajouter explicitement le nom du modèle à la configuration
}
logger.info(f"Configuration: {json.dumps(config, indent=2)}")
try:
# Initialisation des agents avec le modèle LlamaVision spécifié
logger.info(f"Utilisation du modèle LlamaVision: {args.model}")
agents = AgentFactoryLlamaVision.create_all_agents(model_name=args.model)
# Application des skips
if args.skip_ticket_analysis:
logger.info("Étape d'analyse du ticket désactivée")
agents["ticket_analyser"] = None
if args.skip_image_sorting:
logger.info("Étape de tri d'images désactivée")
agents["image_sorter"] = None
if args.skip_image_analysis:
logger.info("Étape d'analyse d'images désactivée")
agents["image_analyser"] = None
if args.skip_report:
logger.info("Étape de génération de rapport désactivée")
agents["report_generator"] = None
# Orchestrateur LlamaVision
orchestrator = OrchestratorLlamaVision(
output_dir=args.output_dir,
ticket_agent=agents.get("ticket_analyser"),
image_sorter=agents.get("image_sorter"),
image_analyser=agents.get("image_analyser"),
report_generator=agents.get("report_generator"),
config=config
)
logger.info(f"Lancement de l'analyse du ticket {args.ticket_id}")
orchestrator.executer(args.ticket_id)
logger.info(f"Analyse du ticket {args.ticket_id} terminée avec succès")
# Génération des fichiers CSV si un rapport a été généré
if agents.get("report_generator") and not args.skip_report:
try:
logger.info(f"Génération des fichiers CSV pour le ticket {args.ticket_id}")
traiter_rapports_ticket(args.ticket_id)
logger.info("Fichiers CSV générés avec succès")
except Exception as e:
logger.error(f"Erreur lors de la génération des fichiers CSV: {e}", exc_info=True)
except Exception as e:
logger.error(f"Erreur lors de l'exécution : {e}", exc_info=True)
return 1
return 0
if __name__ == "__main__":
sys.exit(main())