mirror of
https://github.com/Ladebeze66/AIagent.git
synced 2025-12-15 19:26:49 +01:00
109 lines
3.8 KiB
Python
109 lines
3.8 KiB
Python
import json
|
|
from typing import Dict, List, Any, Optional
|
|
from .llm import LLM
|
|
|
|
class Pixtral(LLM):
|
|
"""
|
|
Classe pour l'intégration avec l'API Mistral AI spécifiquement pour le modèle Pixtral
|
|
Cette classe hérite de la classe de base LLM et est spécialisée pour le modèle pixtral-12b-latest
|
|
"""
|
|
|
|
def __init__(self):
|
|
"""
|
|
Initialisation des attributs spécifiques à Pixtral
|
|
"""
|
|
super().__init__()
|
|
|
|
# Attributs spécifiques à Pixtral
|
|
self.maxToken: int = 1000
|
|
self.seed: int = 0
|
|
self.presence_penalty: float = 0
|
|
self.frequency_penalty: float = 0
|
|
self.n: int = 1
|
|
self.prediction: Dict[str, str] = {"type": "content", "content": ""}
|
|
self.safe_prompt: bool = False
|
|
self.o_stop: str = "string"
|
|
self._m_tabModels: List[str] = ["pixtral-12b-latest"]
|
|
|
|
# Initialisation par défaut avec le modèle Pixtral
|
|
self.Modele = "pixtral-12b-latest" # Modèle fixé à pixtral-12b-latest
|
|
self.o_temperature = 0.2
|
|
self.o_top_p = 1
|
|
self.maxToken = 1000
|
|
self.presence_penalty = 0
|
|
self.frequency_penalty = 0
|
|
self.n = 1
|
|
self.prediction["type"] = "content"
|
|
self.prediction["content"] = ""
|
|
self.safe_prompt = False
|
|
self.o_stop = "string"
|
|
|
|
# Définir l'URL de fonction
|
|
self.urlFonction = "chat/completions"
|
|
|
|
def urlBase(self) -> str:
|
|
"""
|
|
Retourne l'URL de base de l'API Mistral
|
|
"""
|
|
return "https://api.mistral.ai/v1/"
|
|
|
|
def cleAPI(self) -> str:
|
|
"""
|
|
Retourne la clé API Mistral
|
|
"""
|
|
return "2iGzTzE9csRQ9IoASoUjplHwEjA200Vh"
|
|
|
|
def model_list(self) -> List[str]:
|
|
"""
|
|
Retourne uniquement le modèle Pixtral
|
|
Cette classe étant spécialisée pour un modèle spécifique
|
|
"""
|
|
return self._m_tabModels
|
|
|
|
def _even_LLM_POST(self, question: str) -> None:
|
|
"""
|
|
Préparation du contenu de la requête pour Pixtral
|
|
"""
|
|
# S'assurer que le modèle est défini
|
|
self._Contenu["model"] = self.Modele # Toujours défini sur pixtral-12b-latest
|
|
|
|
self._Contenu["messages"] = [
|
|
{"role": "system", "content": self.prompt_system},
|
|
{"role": "user", "content": question}
|
|
]
|
|
|
|
self._Contenu["temperature"] = self.o_temperature
|
|
self._Contenu["top_p"] = self.o_top_p
|
|
|
|
if self.maxToken != 0:
|
|
self._Contenu["max_tokens"] = self.maxToken
|
|
|
|
if self.seed != 0:
|
|
self._Contenu["random_seed"] = self.seed
|
|
|
|
if self.format != "":
|
|
self._Contenu["response_format"] = self.format
|
|
|
|
# Paramètres supplémentaires
|
|
self._Contenu["presence_penalty"] = self.presence_penalty
|
|
self._Contenu["frequency_penalty"] = self.frequency_penalty
|
|
self._Contenu["n"] = 1
|
|
|
|
# Correction: s'assurer que prediction est correctement affecté
|
|
if isinstance(self.prediction, dict):
|
|
self._Contenu["prediction"] = self.prediction
|
|
else:
|
|
self._Contenu["prediction"] = {"type": "content", "content": ""}
|
|
|
|
# S'assurer que o_stop est une chaîne de caractères ou une liste
|
|
if isinstance(self.o_stop, str) and self.o_stop != "string":
|
|
self._Contenu["stop"] = self.o_stop
|
|
elif isinstance(self.o_stop, list):
|
|
self._Contenu["stop"] = self.o_stop
|
|
|
|
def _interrogerRetourneReponse(self, reponse: str) -> str:
|
|
"""
|
|
Extraction de la réponse à partir du JSON retourné par Mistral
|
|
"""
|
|
data = json.loads(reponse)
|
|
return data["choices"][0]["message"]["content"] |