mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-13 09:06:51 +01:00
169 lines
7.2 KiB
Python
169 lines
7.2 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
|
|
import traceback
|
|
|
|
from agent_factory_llama import AgentFactoryLlamaVision
|
|
from orchestrator_llama import OrchestratorLlamaVision
|
|
from agents.utils.report_csv_exporter import traiter_rapports_ticket
|
|
from llm_classes.llama_vision import LlamaVision
|
|
|
|
# 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=AgentFactoryLlamaVision.DEFAULT_MODEL_NAME,
|
|
help=f"Modèle LlamaVision à utiliser (par défaut: {AgentFactoryLlamaVision.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-ocr-llm", action="store_true", help="Désactiver l'OCR avancé via LLM")
|
|
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-vision-ocr", action="store_true", help="Sauter l'OCR avancé via LLM")
|
|
parser.add_argument("--skip-report", action="store_true", help="Sauter la génération du rapport")
|
|
|
|
return parser.parse_args()
|
|
|
|
def main(ticket_id=None):
|
|
"""
|
|
Fonction principale pour l'analyse d'un ticket avec le modèle LlamaVision
|
|
"""
|
|
args = parse_arguments()
|
|
|
|
# Utiliser l'argument passé en ligne de commande s'il existe
|
|
if args.ticket_id:
|
|
ticket_id = args.ticket_id
|
|
|
|
# Vérifier que le ticket_id est fourni
|
|
if not ticket_id:
|
|
print(f"Erreur: ID de ticket requis. Utilisation: python {os.path.basename(__file__)} TICKET_ID")
|
|
sys.exit(1)
|
|
|
|
# Configuration du niveau de log
|
|
if args.debug:
|
|
logging.getLogger().setLevel(logging.DEBUG)
|
|
logger.debug("Mode debug activé")
|
|
|
|
# Modèle LlamaVision
|
|
try:
|
|
model_name = args.model
|
|
# Initialiser le modèle LlamaVision
|
|
logger.info(f"Initialisation du modèle LlamaVision: {model_name}")
|
|
modele_llama = LlamaVision(model_name)
|
|
modele_llama.configurer(temperature=0.2, top_p=0.9, max_tokens=4000)
|
|
|
|
# Récupérer le nom normalisé du modèle
|
|
#normalized_model_name = modele_llama.pipeline_normalized_name
|
|
#logger.info(f"Nom normalisé du modèle: {normalized_model_name}")
|
|
|
|
# Initialiser les agents avec LlamaVision
|
|
logger.info("Création des agents avec LlamaVision")
|
|
factory = AgentFactoryLlamaVision()
|
|
agents = factory.create_all_agents(model_name=model_name)
|
|
|
|
# Récupérer les agents individuels
|
|
ticket_agent = agents.get("ticket_analyser")
|
|
image_sorter = agents.get("image_sorter")
|
|
image_analyser = agents.get("image_analyser")
|
|
report_generator = agents.get("report_generator")
|
|
vision_ocr = agents.get("vision_ocr")
|
|
|
|
# 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,
|
|
"ocr_llm_enabled": not args.no_ocr_llm, # Désactiver si l'option est fournie
|
|
"english_only": True,
|
|
"model_name": model_name # Utiliser le nom normalisé du modèle
|
|
}
|
|
|
|
logger.info(f"Configuration: {json.dumps(config, indent=2)}")
|
|
|
|
# Application des skips
|
|
if args.skip_ticket_analysis:
|
|
logger.info("Étape d'analyse du ticket désactivée")
|
|
ticket_agent = None
|
|
if args.skip_image_sorting:
|
|
logger.info("Étape de tri d'images désactivée")
|
|
image_sorter = None
|
|
if args.skip_image_analysis:
|
|
logger.info("Étape d'analyse d'images désactivée")
|
|
image_analyser = None
|
|
if args.skip_vision_ocr:
|
|
logger.info("Étape d'OCR avancé via LLM désactivée")
|
|
vision_ocr = None
|
|
if args.skip_report:
|
|
logger.info("Étape de génération de rapport désactivée")
|
|
report_generator = None
|
|
|
|
# Créer l'orchestrateur
|
|
logger.info(f"Création de l'orchestrateur pour le ticket {ticket_id}")
|
|
orchestrator = OrchestratorLlamaVision(
|
|
output_dir=args.output_dir,
|
|
ticket_agent=ticket_agent,
|
|
image_sorter=image_sorter,
|
|
image_analyser=image_analyser,
|
|
report_generator=report_generator,
|
|
vision_ocr=vision_ocr,
|
|
config=config
|
|
)
|
|
|
|
# Exécuter l'analyse
|
|
logger.info(f"Démarrage de l'analyse du ticket {ticket_id}")
|
|
orchestrator.executer(ticket_id)
|
|
logger.info(f"Analyse du ticket {ticket_id} terminée")
|
|
|
|
# Génération des fichiers CSV si un rapport a été généré
|
|
if report_generator and not args.skip_report:
|
|
try:
|
|
logger.info(f"Génération des fichiers CSV pour le ticket {ticket_id}")
|
|
traiter_rapports_ticket(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}")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Erreur: {e}")
|
|
if args.debug:
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|
|
|
|
|