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 : object

Réponse enrichie d’un appel LLM avec mesure de consommation.

content: str | List[Any]
co2_emissions: float
__init__(content: str | List[Any], co2_emissions: float) None
class src.smart_watch.core.LLMClient.LLMMessage(role: str, content: str)[source]

Bases : object

Représente un message dans une conversation avec le LLM.

role: str
content: str
__init__(role: str, content: str) None
class src.smart_watch.core.LLMClient.BaseLLMClient(model: str, temperature: float, timeout: int, api_key: str | None, base_url: str | None)[source]

Bases : ABC

Classe de base abstraite pour les clients LLM.

__init__(model: str, temperature: float, timeout: int, api_key: str | None, base_url: str | None)[source]

Initialise le client LLM avec les paramètres de base.

Paramètres:
  • model (str) – le nom du modèle LLM.

  • temperature (float) – la température pour la génération de texte.

  • timeout (int) – le délai d’attente pour les requêtes API, en secondes.

  • api_key (Optional[str]) – clé API pour l’authentification.

  • base_url (Optional[str]) – URL de base de l’API LLM.

_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 | LLMMessage]) List[Dict][source]

Convertit les objets LLMMessage en dictionnaires pour l’appel API.

Paramètres:

messages (List[Union[Dict, LLMMessage]]) – liste de messages à normaliser.

Renvoie:

liste de messages normalisés au format dictionnaire.

Type renvoyé:

List[Dict]

abstractmethod call_llm(messages: List[Dict | LLMMessage], **kwargs) LLMResponse[source]

Méthode abstraite pour effectuer un appel au LLM avec mesure d’émissions.

Paramètres:

messages (List[Union[Dict, LLMMessage]]) – liste de messages à envoyer au LLM.

Renvoie:

réponse du LLM enrichie avec les émissions de CO2.

Type renvoyé:

LLMResponse

send_message(content: str, role: str = 'user', system_prompt: str | None = None, **kwargs) LLMResponse[source]

Envoie un message simple au LLM.

Paramètres:
  • content (str) – le contenu du message à envoyer.

  • role (str) – le rôle de l’expéditeur du message (« user », « assistant », « system »).

  • system_prompt (Optional[str]) – un prompt système optionnel pour initialiser la conversation.

  • **kwargs – paramètres supplémentaires pour l’appel LLM.

Renvoie:

réponse du LLM enrichie avec les émissions de CO2.

Type renvoyé:

LLMResponse

conversation(messages: List[Dict | LLMMessage], **kwargs) LLMResponse[source]

Raccourci pour call_llm.

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é:

LLMResponse

_abc_impl = <_abc._abc_data object>
class src.smart_watch.core.LLMClient.OpenAICompatibleClient(model: str, base_url: str, temperature: float = 0.1, timeout: int = 30, api_key: str | None = None)[source]

Bases : BaseLLMClient

Client pour interagir avec des API compatibles OpenAI (Ollama, etc.).

__init__(model: str, base_url: str, temperature: float = 0.1, timeout: int = 30, api_key: str | None = None)[source]

Initialise le client pour les API compatibles OpenAI.

Paramètres:
  • 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.

  • api_key (Optional[str]) – la clé API pour l’authentification.

call_llm(messages: List[Dict | LLMMessage], response_format: Dict[str, Any] | None = None) LLMResponse[source]

Effectue un appel au LLM.

Paramètres:
  • messages (List[Union[Dict, LLMMessage]]) – liste de messages à envoyer au LLM.

  • response_format (Optional[Dict[str, Any]]) – format de réponse structuré (si nécessaire).

Renvoie:

réponse du LLM enrichie avec les émissions de CO2.

Type renvoyé:

LLMResponse

_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 | LLMMessage]) List[Dict]

Convertit les objets LLMMessage en dictionnaires pour l’appel API.

Paramètres:

messages (List[Union[Dict, LLMMessage]]) – liste de messages à normaliser.

Renvoie:

liste de messages normalisés au format dictionnaire.

Type renvoyé:

List[Dict]

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é:

LLMResponse

conversation(messages: List[Dict | LLMMessage], **kwargs) LLMResponse

Raccourci pour call_llm.

send_message(content: str, role: str = 'user', system_prompt: str | None = None, **kwargs) LLMResponse

Envoie un message simple au LLM.

Paramètres:
  • content (str) – le contenu du message à envoyer.

  • role (str) – le rôle de l’expéditeur du message (« user », « assistant », « system »).

  • system_prompt (Optional[str]) – un prompt système optionnel pour initialiser la conversation.

  • **kwargs – paramètres supplémentaires pour l’appel LLM.

Renvoie:

réponse du LLM enrichie avec les émissions de CO2.

Type renvoyé:

LLMResponse

class src.smart_watch.core.LLMClient.MistralAPIClient(model: str = 'mistral-large-latest', temperature: float = 0.1, random_seed: int = 1, timeout: int = 30, api_key: str | None = None)[source]

Bases : BaseLLMClient

Client pour interagir avec l’API officielle de Mistral AI.

__init__(model: str = 'mistral-large-latest', temperature: float = 0.1, random_seed: int = 1, timeout: int = 30, api_key: str | None = None)[source]

Initialise le client pour l’API Mistral.

Paramètres:
  • model (str) – le nom du modèle Mistral à utiliser.

  • temperature (float) – la température pour la génération de texte.

  • random_seed (int) – graine aléatoire pour la génération.

  • timeout (int) – le délai d’attente pour les requêtes API.

  • api_key (Optional[str]) – la clé API pour l’authentification.

call_llm(messages: List[Dict | LLMMessage], tool_params: Dict[str, Any] | None = None) LLMResponse[source]

Effectue un appel au LLM Mistral.

Paramètres:
  • messages (List[Union[Dict, LLMMessage]]) – liste de messages à envoyer au LLM.

  • tool_params (Optional[Dict[str, Any]]) – paramètres pour les outils (si nécessaire).

Renvoie:

réponse du LLM enrichie avec les émissions de CO2.

Type renvoyé:

LLMResponse

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é:

LLMResponse

Note

Utilise l’API embeddings de Mistral en transitionnant à travers le endpoint OpenAI compatible car Mistral expose leurs embeddings via une API compatible OpenAI.

_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 | LLMMessage]) List[Dict]

Convertit les objets LLMMessage en dictionnaires pour l’appel API.

Paramètres:

messages (List[Union[Dict, LLMMessage]]) – liste de messages à normaliser.

Renvoie:

liste de messages normalisés au format dictionnaire.

Type renvoyé:

List[Dict]

conversation(messages: List[Dict | LLMMessage], **kwargs) LLMResponse

Raccourci pour call_llm.

send_message(content: str, role: str = 'user', system_prompt: str | None = None, **kwargs) LLMResponse

Envoie un message simple au LLM.

Paramètres:
  • content (str) – le contenu du message à envoyer.

  • role (str) – le rôle de l’expéditeur du message (« user », « assistant », « system »).

  • system_prompt (Optional[str]) – un prompt système optionnel pour initialiser la conversation.

  • **kwargs – paramètres supplémentaires pour l’appel LLM.

Renvoie:

réponse du LLM enrichie avec les émissions de CO2.

Type renvoyé:

LLMResponse

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.

Paramètres:
  • schema (Dict[str, Any]) – le schéma JSON que la réponse doit suivre.

  • name (str) – le nom de la réponse.

Renvoie:

format de réponse pour l’API

Type renvoyé:

Dict[str, Any]

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, forçant une réponse structurée.

Paramètres:
  • schema (Dict[str, Any]) – le schéma JSON que la réponse doit suivre.

  • function_name (str) – le nom de la fonction à appeler.

Renvoie:

format de réponse pour l’API Mistral avec tool calling

Type renvoyé:

Dict[str, Any]