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

contenu de la réponse, texte ou liste (pour les embeddings).

Type:

Union[str, List[Any]]

co2_emissions

émissions de CO2 en kg.

Type:

float

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

rôle du message (« user », « assistant », « system »).

Type:

str

content

contenu textuel du message.

Type:

str

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) 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.

model

nom du modèle LLM.

Type:

str

temperature

température pour la génération.

Type:

float

timeout

délai d’attente pour les requêtes.

Type:

int

api_key

clé API.

Type:

Optional[str]

base_url

URL de base de l’API.

Type:

Optional[str]

session

session HTTP pour les requêtes.

Type:

requests.Session

error_handler

gestionnaire d’erreurs.

Type:

ErrorHandler

_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[Dict[str, str]][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[Dict[str, str]]

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

LLMResponse

send_message(content: str, role: str = 'user', system_prompt: str | None = None, **kwargs: Any) 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 (Any) – 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[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é:

LLMResponse

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(api_key: str, model: str, base_url: str, temperature: float = 0.1, timeout: int = 30, seed: int | None = None)[source]

Bases : BaseLLMClient

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

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

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[Dict[str, str]]

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

LLMResponse

send_message(content: str, role: str = 'user', system_prompt: str | None = None, **kwargs: Any) 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 (Any) – 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(api_key: str, model: str, temperature: float = 0.1, timeout: int = 30, seed: int | None = None)[source]

Bases : BaseLLMClient

Client 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.

Paramètres:
  • api_key (str) – la clé API pour l’authentification.

  • 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.

  • seed (Optional[int]) – graine aléatoire pour la génération (optionnel).

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:
  • messages (List[Union[Dict[str, str], LLMMessage]]) – liste des messages à envoyer.

  • tool_params (Optional[Dict[str, Any]]) – paramètres pour l’utilisation d’outils.

  • index (int) – index de l’appel pour le logging.

  • total (int) – nombre total d’appels pour le logging.

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 qui est compatible avec l’API 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[str, str] | LLMMessage]) List[Dict[str, str]]

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[Dict[str, str]]

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

LLMResponse

send_message(content: str, role: str = 'user', system_prompt: str | None = None, **kwargs: Any) 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 (Any) – 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.

Cette fonction force 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]