from .base_llm import BaseLLM
import requests
import os

class MistralMedium(BaseLLM):
    """
    Classe pour interagir avec le modèle Mistral Medium
    """
    def __init__(self):
        super().__init__("mistral-medium")
        self.configurer(temperature=0.3, top_p=0.9)  # Paramètres par défaut

    def urlBase(self) -> str:
        return "https://api.mistral.ai/v1/"

    def cleAPI(self) -> str:
        return "2iGzTzE9csRQ9IoASoUjplHwEjA200Vh"  # Clé API d'exemple, à remplacer par la vraie clé

    def urlFonction(self) -> str:
        return "chat/completions"

    def _preparer_contenu(self, question: str) -> dict:
        """
        Prépare le contenu de la requête pour l'API Mistral
        """
        return {
            "model": self.modele,
            "messages": [
                {"role": "system", "content": self.prompt_system},
                {"role": "user", "content": question}
            ],
            **self.params
        }

    def _traiter_reponse(self, reponse: requests.Response) -> str:
        """
        Traite la réponse de l'API Mistral
        """
        try:
            data = reponse.json()
            return data["choices"][0]["message"]["content"]
        except Exception as e:
            return f"Erreur lors du traitement de la réponse: {str(e)}\nRéponse brute: {reponse.text}"

    def interroger_avec_image(self, image_path: str, question: str) -> str:
        """
        Ce modèle ne supporte pas directement l'analyse d'images, cette méthode est fournie
        pour la compatibilité avec l'interface BaseLLM mais utilise uniquement le texte.
        
        Args:
            image_path: Chemin vers l'image à analyser (ignoré par ce modèle)
            question: Question ou instructions pour l'analyse
            
        Returns:
            Réponse du modèle à la question, en indiquant que l'analyse d'image n'est pas supportée
        """
        image_name = os.path.basename(image_path)
        prompt = f"""[Note: Ce modèle n'a pas accès à l'image demandée: {image_name}]

Question concernant l'image: 
{question}

Veuillez noter que je ne peux pas traiter directement les images. Voici une réponse basée uniquement sur le texte de la question."""
        
        return self.interroger(prompt)
