#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Agent pour analyser en détail les images pertinentes dans un contexte de support technique. """ import os from typing import Dict, Any, Optional from .agent_base import Agent from llm import Pixtral class AgentAnalyseImage(Agent): """ Agent qui analyse en détail le contenu d'une image technique. """ def __init__(self, api_key: Optional[str] = None): """ Initialise l'agent d'analyse d'images. Args: api_key: Clé API pour le LLM """ super().__init__("AgentAnalyseImage") self.llm = Pixtral(api_key=api_key) self.llm.system_prompt = """ Vous êtes un expert en analyse d'images techniques. Votre rôle est d'examiner des captures d'écran ou des photos liées à des problèmes techniques et de: 1. Décrire précisément le contenu de l'image 2. Identifier les éléments techniques visibles (erreurs, interfaces, configurations) 3. Extraire tout texte visible (messages d'erreur, logs, indicateurs) Soyez précis et factuel dans votre analyse. """ def executer(self, image_path: str, contexte: Optional[str] = None) -> Dict[str, Any]: """ Analyse en détail une image technique. Args: image_path: Chemin vers l'image à analyser contexte: Contexte optionnel du ticket pour une analyse plus pertinente Returns: Dictionnaire contenant l'analyse de l'image """ # Vérifier que l'image existe if not os.path.exists(image_path): erreur = f"L'image {image_path} n'existe pas" self.ajouter_historique("analyse_image_erreur", image_path, erreur) return {"error": erreur} # Construire le prompt pour l'analyse if contexte: prompt = f""" Analysez cette image dans le contexte suivant: {contexte} Décrivez précisément: 1. Ce que vous voyez dans l'image 2. Les éléments techniques visibles 3. Tout texte visible (messages d'erreur, logs, etc.) 4. Les indices sur le problème potentiel """ else: prompt = """ Analysez cette image en détail et décrivez ce que vous voyez. Identifiez tout problème technique visible, messages d'erreur, et éléments importants. """ # Enregistrer l'action dans l'historique self.ajouter_historique("analyse_image", image_path, "Analyse en cours...") # Appel au LLM try: resultat = self.llm.analyze_image(image_path, prompt) # Vérifier si l'appel a réussi if "error" in resultat: self.ajouter_historique("analyse_image_erreur", image_path, resultat["error"]) return resultat self.ajouter_historique("analyse_image_resultat", "Analyse terminée", resultat.get("content", "")[:200]) return resultat except Exception as e: erreur = f"Erreur lors de l'analyse: {str(e)}" self.ajouter_historique("analyse_image_erreur", image_path, erreur) return {"error": erreur}