Client LLM
Le module LLMClient fournit une interface unifiée pour interagir avec différents fournisseurs de modèles de langage (LLM).
Usage
LLMClient est utilisé par LLMProcessor pour communiquer avec le modèle de langage configuré.
Fonctionnalités
Supporte les API compatibles OpenAI (OpenAI, Ollama, etc.) et l’API native de Mistral.
Gère les appels aux LLM pour l’extraction de données structurées (JSON).
Intègre CodeCarbon pour mesurer l’empreinte carbone de chaque requête.
Gère les erreurs de communication et les re-essais.
Modules
- class src.smart_watch.core.LLMClient.LLMResponse(content: str | List[Any], co2_emissions: float)[source]
Bases :
objectRéponse enrichie d’un appel LLM avec mesure de consommation.
- class src.smart_watch.core.LLMClient.LLMMessage(role: str, content: str)[source]
Bases :
objectReprésente un message dans une conversation avec le LLM.
- class src.smart_watch.core.LLMClient.BaseLLMClient(model: str, temperature: float, timeout: int, api_key: str | None, base_url: str | None)[source]
Bases :
ABCClasse de base abstraite pour les clients LLM.
- __init__(model: str, temperature: float, timeout: int, api_key: str | None, base_url: str | None) None[source]
Initialise le client LLM avec les paramètres de base.
- Paramètres:
- session
session HTTP pour les requêtes.
- Type:
requests.Session
- error_handler
gestionnaire d’erreurs.
- Type:
- _create_session() Session[source]
Crée et configure une session requests avec les en-têtes appropriés.
- Renvoie:
la session HTTP configurée.
- Type renvoyé:
requests.Session
- _normalize_messages(messages: List[Dict[str, str] | LLMMessage]) List[Any][source]
Convertit les objets LLMMessage en dictionnaires pour l’appel API.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages à normaliser.
- Renvoie:
liste de messages normalisés au format dictionnaire.
- Type renvoyé:
List[Any]
- abstractmethod call_llm(messages: List[Dict[str, str] | LLMMessage], index: int = 0, total: int = 0, **kwargs: Any) LLMResponse[source]
Méthode abstraite pour effectuer un appel au LLM avec mesure d’émissions.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages à envoyer au LLM.
index (int) – index de l’appel dans une liste, utilisé pour le logging.
total (int) – nombre total d’appels à traiter, utilisé pour le logging.
**kwargs (Any) – arguments supplémentaires pour l’appel LLM.
- Renvoie:
réponse du LLM enrichie avec les émissions de CO2.
- Type renvoyé:
- send_message(content: str, role: str = 'user', system_prompt: str | None = None, **kwargs: Any) LLMResponse[source]
Envoie un message simple au LLM.
- Paramètres:
- Renvoie:
réponse du LLM enrichie avec les émissions de CO2.
- Type renvoyé:
- conversation(messages: List[Dict[str, str] | LLMMessage], **kwargs: Any) LLMResponse[source]
Raccourci pour call_llm.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages.
**kwargs (Any) – arguments supplémentaires.
- Renvoie:
réponse du LLM.
- Type renvoyé:
- call_embeddings(texts: List[str]) LLMResponse[source]
Appel des embeddings via l’API LLM avec mesure d’émissions.
- Paramètres:
texts (List[str]) – liste de textes pour lesquels générer des embeddings.
- Renvoie:
réponse contenant les embeddings et les émissions de CO2.
- Type renvoyé:
- _abc_impl = <_abc._abc_data object>
- class src.smart_watch.core.LLMClient.OpenAICompatibleClient(api_key: str, model: str, base_url: str, temperature: float = 0.1, timeout: int = 30, seed: int | None = None)[source]
Bases :
BaseLLMClientClient pour interagir avec des API compatibles OpenAI (Ollama, etc.).
- __init__(api_key: str, model: str, base_url: str, temperature: float = 0.1, timeout: int = 30, seed: int | None = None) None[source]
Initialise le client pour les API compatibles OpenAI.
- Paramètres:
api_key (str) – la clé API pour l’authentification.
model (str) – le nom du modèle LLM.
base_url (str) – l’URL de base de l’API.
temperature (float) – la température pour la génération de texte.
timeout (int) – le délai d’attente pour les requêtes API.
seed (Optional[int]) – graine aléatoire pour la génération (optionnel).
- call_llm(messages: List[Dict[str, str] | LLMMessage], response_format: Dict[str, Any] | None = None, index: int = 0, total: int = 0) LLMResponse[source]
Effectue un appel au LLM.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages à envoyer au LLM.
response_format (Optional[Dict[str, Any]]) – format de réponse structuré (si nécessaire).
index (int) – index de l’appel dans une liste, utilisé pour le logging.
total (int) – nombre total d’appels à traiter, utilisé pour le logging.
- Renvoie:
réponse du LLM enrichie avec les émissions de CO2.
- Type renvoyé:
- _abc_impl = <_abc._abc_data object>
- _create_session() Session
Crée et configure une session requests avec les en-têtes appropriés.
- Renvoie:
la session HTTP configurée.
- Type renvoyé:
requests.Session
- _normalize_messages(messages: List[Dict[str, str] | LLMMessage]) List[Any]
Convertit les objets LLMMessage en dictionnaires pour l’appel API.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages à normaliser.
- Renvoie:
liste de messages normalisés au format dictionnaire.
- Type renvoyé:
List[Any]
- call_embeddings(texts: List[str]) LLMResponse
Appel des embeddings via l’API LLM avec mesure d’émissions.
- Paramètres:
texts (List[str]) – liste de textes pour lesquels générer des embeddings.
- Renvoie:
réponse contenant les embeddings et les émissions de CO2.
- Type renvoyé:
- conversation(messages: List[Dict[str, str] | LLMMessage], **kwargs: Any) LLMResponse
Raccourci pour call_llm.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages.
**kwargs (Any) – arguments supplémentaires.
- Renvoie:
réponse du LLM.
- Type renvoyé:
- class src.smart_watch.core.LLMClient.MistralAPIClient(api_key: str, model: str, temperature: float = 0.1, timeout: int = 30, seed: int | None = None)[source]
Bases :
BaseLLMClientClient pour interagir avec l’API officielle de Mistral AI.
- __init__(api_key: str, model: str, temperature: float = 0.1, timeout: int = 30, seed: int | None = None) None[source]
Initialise le client pour l’API Mistral.
- call_llm(messages: List[Dict[str, str] | LLMMessage], tool_params: Dict[str, Any] | None = None, index: int = 0, total: int = 0) LLMResponse[source]
Effectue un appel vers l’API Mistral.
- Paramètres:
- Renvoie:
réponse du LLM enrichie avec les émissions de CO2.
- Type renvoyé:
- call_embeddings(texts: List[str]) LLMResponse[source]
Appel d’embeddings via API Mistral avec mesure d’émissions.
- Paramètres:
texts (List[str]) – liste de textes pour lesquels générer des embeddings.
- Renvoie:
réponse contenant les embeddings et les émissions de CO2.
- Type renvoyé:
- _abc_impl = <_abc._abc_data object>
- _create_session() Session
Crée et configure une session requests avec les en-têtes appropriés.
- Renvoie:
la session HTTP configurée.
- Type renvoyé:
requests.Session
- _normalize_messages(messages: List[Dict[str, str] | LLMMessage]) List[Any]
Convertit les objets LLMMessage en dictionnaires pour l’appel API.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages à normaliser.
- Renvoie:
liste de messages normalisés au format dictionnaire.
- Type renvoyé:
List[Any]
- conversation(messages: List[Dict[str, str] | LLMMessage], **kwargs: Any) LLMResponse
Raccourci pour call_llm.
- Paramètres:
messages (List[Union[Dict[str, str], LLMMessage]]) – liste de messages.
**kwargs (Any) – arguments supplémentaires.
- Renvoie:
réponse du LLM.
- Type renvoyé:
- src.smart_watch.core.LLMClient.get_structured_response_format(schema: Dict[str, Any], name: str = 'response') Dict[str, Any][source]
Formate un schéma pour les structured outputs OpenAI.
- src.smart_watch.core.LLMClient.get_mistral_tool_format(schema: Dict[str, Any], function_name: str = 'extract_info') Dict[str, Any][source]
Crée le dictionnaire pour le tool calling avec Mistral.
Cette fonction force une réponse structurée.
- class src.smart_watch.core.LLMClient.EmbeddingModel(md_config: MarkdownFilteringConfig, logger: SmartWatchLogger)[source]
Bases :
objectClasse d’abstraction pour gérer la génération d’embeddings, qu’elle soit locale ou via une API distante.
- __init__(md_config: MarkdownFilteringConfig, logger: SmartWatchLogger)[source]
Initialise le client d’embedding en fonction de la configuration fournie. :param md_config: Configuration pour le filtrage Markdown et les embeddings. :type md_config: MarkdownFilteringConfig :param logger: Logger pour enregistrer les messages d’information, de débogage et d’erreur. :type logger: SmartWatchLogger
- Lève:
ValueError – Si le nom du modèle est manquant pour un fournisseur local, si la clé API est manquante pour les fournisseurs distants, si le nom du modèle est manquant pour les fournisseurs distants, ou si l’URL de base est manquante pour OpenAI ou Ollama, ou si le fournisseur n’est pas supporté.
Exception – Si une erreur survient lors du chargement du modèle local.