llm_ticket3/main_llama.py
2025-04-22 17:29:42 +02:00

108 lines
4.4 KiB
Python

"""Point d'entrée principal pour l'analyse d'un ticket de support en utilisant exclusivementLlama_vision."""
import os
import sys
import argparse
import logging
import json
from typing import Dict, Any
from agent_factory_llama import AgentFactoryLlamaVision
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 llama_vision.")
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:)")
#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 suvegarde des rapports")
# Etapes falcutatives
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."""
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
}
logger.info(f"Configuration: {json.dumps(config, indent=2)}")
try:
# Initialisation des agents llama_vision
agents = AgentFactoryLlamaVision.create_all_agents()
# Application des skips
if args.skip_ticket_analysis:
agents["ticket_analyser"] = None
if args.skip_image_sorting:
agents["image_sorter"] = None
if args.skip_image_analysis:
agents["image_analyser"] = None
if args.skip_report:
agents["report_generator"] = None
# Orchestrateur de llama_vision
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")
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())