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