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