Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Fournisseurs personnalisés

Trois façons d’ajouter un fournisseur que ZeroClaw n’inclut pas par défaut :

  1. Utilisez le slot custom. Pour tout point de terminaison compatible OpenAI non couvert par un slot canonique existant.
  2. Utilisez les emplacements de serveur local de première classe (lmstudio, llamacpp, sglang, vllm, osaurus, litellm). Des wrappers légers avec des valeurs par défaut pertinentes.
  3. Implémentez le trait ModelProvider en Rust. Pour tout ce qui n’est pas compatible avec OpenAI.

Point de terminaison compatible OpenAI : utilisez l’emplacement custom

Si le service prend en charge le format chat-completions d’OpenAI, il s’agit d’une modification de configuration uniquement. L’emplacement custom nécessite uri (l’énumération d’endpoint de la famille n’a pas de valeur par défaut) ; référencez-le depuis le model_provider d’un agent.

Il s’agit de la même implémentation runtime OpenAiCompatibleModelProvider utilisée par groq, mistral, xai et tous les autres fournisseurs disposant de leur propre emplacement canonique dans le catalogue. La différence réside dans l’emplacement de famille que vous utilisez : custom est l’emplacement fourre-tout pour les points de terminaison non représentés par un emplacement de fournisseur.

Pour une passerelle qui ne peut pas accepter les résultats d’outils contenant des images, omettez ces charges utiles tout en conservant le texte de l’outil qui les entoure :

[providers.models.custom.gateway]
uri = "https://gateway.example.com/v1"
model = "my-model"
tool_result_image_policy = "omit"

Serveurs d’inférence locale de première classe

ZeroClaw fournit des emplacements canoniques pour les piles d’inférence locale les plus répandues. Elles sont toutes compatibles OpenAI en interne, mais avec des valeurs uri par défaut pré-appliquées, ce qui vous permet généralement d’omettre complètement uri.

llama.cpp : slot llamacpp

sh

llama-server -hf ggml-org/gpt-oss-20b-GGUF --jinja -c 133000 --host 127.0.0.1 --port 8033

Les champs optionnels s’appliquent à toute famille de compat-slot (y compris llamacpp). L’ensemble complet, dérivé du schéma :

api_key 🔑 secret · default

Jeton d’API secret pour ce model_provider. Récupérez-le depuis le tableau de bord du model_provider (plateforme OpenAI, console Anthropic, page des clés OpenRouter, etc.). Stocké via le trousseau de clés du système d’exploitation lorsque c’est possible ; ne le validez jamais directement dans config.toml.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.api_key.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.api_key.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.api_key    # entrée masquée, stockée chiffrée

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__api_key=
chat_template_kwargs table · default

Paires clé/valeur arbitraires transmises telles quelles sous la forme d’un objet chat_template_kwargs de premier niveau dans le corps de la requête des fournisseurs compatibles avec OpenAI. Utilisées par des backends prenant en charge les templates de chat, tels que vLLM, SGLang et llama.cpp, pour transmettre des variables de template propres à la famille de modèles qui contrôlent un comportement non exposé par les autres champs. Doit être un objet JSON (table inline TOML) ; les valeurs qui ne sont pas des objets sont ignorées avec un avertissement. Exemple (désactivation du mode réflexion de Qwen3) : chat_template_kwargs = { enable_thinking = false }

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.chat_template_kwargs.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.chat_template_kwargs.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.chat_template_kwargs <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__chat_template_kwargs=
context_window integer? · default

Taille de la fenêtre de contexte (nombre maximum de tokens d’entrée) pour ce modèle. Rempli automatiquement lors de l’initialisation via le point de terminaison /models du fournisseur, si disponible. Remplacer manuellement pour les points de terminaison personnalisés ou en cas d’échec de la détection automatique.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.context_window.

zerocode

Dans le panneau Config, définissez le champ providers.models.custom.<alias>.context_window.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.context_window <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__context_window=
extra_headers 🔑 secret · default

En-têtes HTTP supplémentaires envoyés avec chaque requête. Cas de niche : utilisés pour les passerelles d’authentification, les proxys d’entreprise ou les passerelles personnalisées qui exigent un en-tête de traçage. La plupart des utilisateurs n’y touchent jamais ; modifiez directement config.toml si vous en avez besoin.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.extra_headers.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.extra_headers.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.extra_headers    # entrée masquée, stockée chiffrée

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__extra_headers=
fallback ModelProviderRef[] · default

Liste ordonnée des autres alias de fournisseurs à essayer lorsque tous les modèles de cet alias ont échoué. Chaque entrée est une référence pointée <type>.<alias> vers providers.models et se résout avec ses propres identifiants, point de terminaison et modèle. Un fallback n’hérite jamais de la clé de cet alias. Le parcours s’effectue en profondeur d’abord : les modèles de cet alias sont épuisés en premier, puis chaque alias de fallback est parcouru à son tour (en appliquant ses propres fallback_models et fallback). Vide signifie aucun fallback au niveau du fournisseur.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.fallback.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.fallback.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.fallback <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__fallback=
fallback_models string[] · default

Modèles alternatifs ordonnés à essayer sur CE fournisseur avant de basculer vers les alias fallback. Mêmes point de terminaison, clé et en-têtes que le model principal. Seul l’identifiant du modèle change. Utilisez cette option lorsqu’un fournisseur propose un modèle de secours (p. ex. une variante plus petite ou plus ancienne) qui doit être essayé avant de quitter complètement le fournisseur. Si vide, seul model est essayé.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.fallback_models.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.fallback_models.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.fallback_models <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__fallback_models=
kind string? · default

Implémentation de fournisseur à instancier pour ce profil. Utilisez ceci lorsqu’un emplacement typé canonique doit s’exécuter via une implémentation compatible, par ex. [providers.models.openai.proxy] kind = "openai-compatible".

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.kind.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.kind.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.kind <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__kind=
live_pricing bool · default

Récupère les prix de tokens en direct pour les modèles de ce fournisseur depuis sa propre liste /models compatible OpenAI (la passerelle est la source de vérité pour ses prix), en renseignant les tarifs de suivi des coûts pour les modèles que l’opérateur n’a PAS tarifés sous [cost.rates] / pricing. Les modèles que la passerelle ne tarifie pas (ou les fournisseurs sans aucune liste HTTP /models, comme une passerelle sous-processus telle que kilocli) se rabattent sur le catalogue public models.dev. Les tarifs configurés l’emportent toujours ; les prix en direct ne comblent que les lacunes. Une tâche en arrière-plan actualise l’instantané des prix toutes les heures ; le chemin d’enregistrement des coûts lit l’instantané en cache et ne bloque jamais sur le réseau. Par défaut false : désactivé signifie aucune récupération et un comportement identique à une build sans la fonctionnalité.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.live_pricing.

zerocode

Dans le volet Configuration, définissez le champ providers.models.custom.<alias>.live_pricing.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.live_pricing <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__live_pricing=
max_tokens integer? · default

Limite stricte de la longueur des réponses en tokens. La plupart des modèles appliquent déjà des limites intégrées raisonnables ; laissez ce paramètre non défini sauf si vous avez spécifiquement besoin de tronquer les sorties longues pour des raisons de coût ou de latence.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.max_tokens.

zerocode

Dans le panneau Config, définissez le champ providers.models.custom.<alias>.max_tokens.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.max_tokens <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__max_tokens=
merge_system_into_user bool · default

Particularité spécifique au ModelProvider : intégrer le prompt système dans le premier message utilisateur au lieu d’envoyer un rôle system distinct. Nécessaire uniquement pour les modèles qui rejettent (ou gèrent mal) un rôle system autonome, p. ex. certaines variantes plus anciennes de Mistral.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.merge_system_into_user.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.merge_system_into_user.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.merge_system_into_user <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__merge_system_into_user=
model string? · default

Identifiant de modèle à envoyer avec chaque requête : la chaîne d’identification provenant du catalogue du model_provider (par ex. gpt-4o, claude-sonnet-4-5, llama-3.3-70b). Doit correspondre à un modèle que le model_provider sert réellement sur ce compte.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.model.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.model.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.model <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__model=
native_tools bool? · default

Remplace la valeur par défaut du fournisseur pour l’appel d’outils natif. None (par défaut) respecte le choix intégré du fournisseur. Some(true) force l’activation des appels d’outils natifs, Some(false) force le repli textuel. Actuellement consulté uniquement par la fabrique Groq, qui utilise par défaut le repli textuel car les modèles Groq de la famille llama rejettent les appels d’outils natifs avec une erreur HTTP 400. Définir native_tools = true réactive l’appel d’outils natif pour les modèles Groq qui le prennent en charge.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.native_tools.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.native_tools.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.native_tools <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__native_tools=
pricing map · default

Tarification par modèle pour le suivi des coûts, en USD par million de tokens. Table clé/valeur libre. Les clés sont des identifiants de modèles définis par l’utilisateur ; un suffixe optionnel .input / .output encode la dimension de tarification lorsque l’opérateur souhaite séparer les tarifs. Une clé simple sans suffixe est utilisée comme tarif forfaitaire par token lorsqu’aucune dimension n’est spécifiée. La valeur par défaut est vide : le suivi des coûts retombe sur des tarifs « inconnus » et seule l’utilisation des tokens est enregistrée. Exemple : pricing = { opus = 15.0, sonnet = 3.0 } Ou en mode séparé : pricing = { "opus.input" = 15.0, "opus.output" = 75.0 }

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.pricing.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.pricing.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.pricing <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__pricing=
provider_extra table · default

Paramètres JSON supplémentaires à inclure dans les requêtes API. Fusionnés au niveau supérieur du corps de la requête, permettant des fonctionnalités spécifiques au fournisseur (routage, transformations, etc.) sans modification du code. Exemple : provider_extra = { model_provider = { only = ["Anthropic"] } }

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.provider_extra.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.provider_extra.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.provider_extra <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__provider_extra=
replay_assistant_reasoning bool? · default

Si le raisonnement stocké de l’assistant doit être rejoué sur les messages d’historique d’assistant sortants. Some(false) supprime reasoning_content et reasoning avant l’envoi. None (par défaut) respecte la valeur par défaut intégrée du fournisseur (true pour la plupart des fournisseurs compat, false pour Groq).

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.replay_assistant_reasoning.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.replay_assistant_reasoning.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.replay_assistant_reasoning <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__replay_assistant_reasoning=
requires_openai_auth bool · default

Lorsque true, le client récupère les identifiants depuis le profil d’authentification openai-codex stocké de ZeroClaw au lieu du champ api_key ci-dessus. Importez une connexion Codex CLI existante avec zeroclaw auth login --model-provider openai-codex --import ~/.codex/auth.json, ou exécutez zeroclaw auth login --model-provider openai-codex. Activez uniquement pour le model_provider OpenAI Codex ; laissez désactivé pour les model_providers standard à clé API.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.requires_openai_auth.

zerocode

Dans le panneau Config, définissez le champ providers.models.custom.<alias>.requires_openai_auth.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.requires_openai_auth <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__requires_openai_auth=
temperature number? · default

Température d’échantillonnage transmise au modèle. Les valeurs faibles (0.0–0.3) produisent une sortie déterministe, quasi littérale, adaptée au code, au routage et au résumé. Les valeurs élevées (0.7–1.2) produisent une sortie plus variée, adaptée aux conversations ouvertes.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.temperature.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.temperature.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.temperature <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__temperature=
think bool? · default

Active ou désactive le raisonnement en chaîne de pensée pour les modèles qui le prennent en charge (p. ex. Qwen3, GLM-4). true active le raisonnement, false le désactive. None (par défaut) laisse le modèle décider. Transmis sous le nom enable_thinking dans le corps de la requête ; correspond au champ think du fournisseur Ollama.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.think.

zerocode

Dans le panneau Config, définissez le champ providers.models.custom.<alias>.think.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.think <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__think=
timeout_secs integer? · default

Délai d’expiration des requêtes HTTP en secondes. Augmentez cette valeur pour les model_providers locaux lents (Ollama sur CPU, gros modèles locaux) ou les réseaux à latence élevée ; laissez la valeur non définie sinon.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.timeout_secs.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.timeout_secs.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.timeout_secs <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__timeout_secs=
tls_ca_cert_path string? · default

Chemin vers un certificat CA encodé en PEM pour les connexions TLS à ce fournisseur. Doit être un chemin absolu ; l’expansion shell (par exemple ~) n’est pas effectuée. Laissez ce paramètre non défini pour utiliser le magasin de confiance par défaut du système.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.tls_ca_cert_path.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.tls_ca_cert_path.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.tls_ca_cert_path <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__tls_ca_cert_path=
tool_result_image_policy ToolResultImagePolicy · default

Comment les fournisseurs de chat-completions compatibles nativement gèrent les marqueurs d’image dans les résultats de role=tool. image_url préserve les parties d’image structurées ; omit supprime leurs charges utiles et ajoute une notification fixe. Cela n’affecte pas le contenu d’image fourni directement par l’utilisateur ni les fournisseurs OpenAI Responses.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.tool_result_image_policy.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.tool_result_image_policy.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.tool_result_image_policy <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__tool_result_image_policy=
uri string? · default

URI du point de terminaison auquel le client accède. Remplacez le point de terminaison par défaut de la famille lorsque vous ciblez une passerelle auto-hébergée (LiteLLM, vLLM, Ollama), un proxy personnalisé ou toute URL non standard. Laissez non défini pour utiliser l’URI par défaut de la famille issu de son implémentation ModelEndpoint. Définissez ici l’URL COMPLÈTE du point de terminaison ; il n’existe pas de champ séparé pour le suffixe de chemin.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.uri.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.uri.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.uri <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__uri=
vision bool? · default

Remplace la capacité vision (entrée d’images) du fournisseur. None (par défaut) utilise la valeur par défaut intégrée à la famille de fournisseurs. Plusieurs familles (llama.cpp, le point de terminaison compatible OpenAI générique, etc.) supposent la prise en charge de la vision car elles peuvent servir des modèles multimodaux. Définissez vision = false pour un modèle texte uniquement servi par une telle famille (par ex. un LLM texte derrière llama.cpp) afin que les messages contenant des images soient acheminés vers un [multimodal] vision_model_provider configuré plutôt qu’envoyés à un modèle qui les rejette. Some(true) force l’activation de la vision.

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.vision.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.vision.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.vision <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__vision=
wire_api WireApi · default

Posez-le sur n’importe quelle surface :

Tableau de bord de la passerelle

Ouvrez /config/providers.models/custom et définissez le champ providers.models.custom.<alias>.wire_api.

zerocode

Dans le volet Config, définissez le champ providers.models.custom.<alias>.wire_api.

zeroclaw config

zeroclaw config set providers.models.custom.<alias>.wire_api <value>

Variable d’environnement

Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :

export ZEROCLAW_providers__models__custom__<alias>__wire_api=

Le contrôle du mode de réflexion varie selon la famille de modèles. think = false définit le champ enable_thinking de premier niveau dans la requête. Certains modèles (par exemple Qwen3) lisent plutôt ce drapeau depuis le modèle Jinja via chat_template_kwargs :

Les autres familles de modèles utilisent des noms de variables de modèle différents, vérifiez le modèle de chat de votre modèle et définissez la clé appropriée sous chat_template_kwargs.

SGLang : emplacement sglang

sh

python -m sglang.launch_server --model meta-llama/Llama-3.1-8B-Instruct --port 30000

vLLM : emplacement vllm

sh

vllm serve meta-llama/Llama-3.1-8B-Instruct

LM Studio, Osaurus, LiteLLM

Les slots lmstudio, osaurus, litellm suivent le même modèle, voir le catalogue.

Protocole de transmission : wire_api = "responses"

Les nouveaux emplacements du fournisseur OpenAI écrits dans la configuration (providers.models.openai.<alias>, créés par zeroclaw quickstart ou l’interface de la passerelle/configuration) utilisent par défaut wire_api = "responses" car les modèles GPT récents d’OpenAI emploient POST /v1/responses comme wire principal. Les autres emplacements avec point de terminaison personnalisé (custom, llamacpp et les fournisseurs compatibles OpenAI) conservent par défaut le wire chat-completions ; un point de terminaison qui ne parle que le wire responses d’OpenAI (certains déploiements auto-hébergés vLLM / TGI) nécessite un opt-in explicite wire_api = "responses" sur l’entrée d’alias.

Lorsque cette option est définie sur "responses", le fournisseur est construit en tant que OpenAiResponsesModelProvider (appels d’outils en streaming complet via le protocole responses) plutôt qu’en tant que fournisseur chat-completions. Définissez "chat_completions" pour forcer le protocole legacy. Deux cas maintiennent chat-completions à l’exécution pour la compatibilité ascendante, de sorte qu’aucune configuration existante ne change de protocole lors d’une mise à niveau :

  • Une entrée persistante providers.models.openai.<alias> qui omet wire_api est désérialisée comme non définie et reste sur chat-completions.
  • Une référence nue model_provider = "openai" (ou une référence pointée vers un alias inexistant) ne possède aucune entrée de configuration à lire ; elle est construite à partir du fallback de la famille et reste sur chat-completions. La valeur par défaut de responses ne s’applique que lorsqu’un emplacement est effectivement écrit dans la configuration.

wire_api est pris en charge par les familles bring-your-own-endpoint où le wire est configurable par l’opérateur : openai, llamacpp et custom (ainsi que le chemin générique compatible openai). Les emplacements de fournisseurs de marque (groq, mistral, deepseek, …) ont un protocole wire fixe et ignorent ce champ, à une exception près : opencode prend en charge wire_api = "responses" car OpenCode Zen dessert les deux wires. Sans surcharge uri, la route responses d’OpenCode cible https://opencode.ai/zen/v1/responses :

[providers.models.opencode.default]
model    = "big-pickle"
wire_api = "responses"

Le paramètre régit à la fois le chemin de l’agent principal et les cibles déléguées, de sorte qu’un délégué dont l’alias cible déclare wire_api = "responses" atteint le point de terminaison via le protocole responses.

Validation

Quelle que soit l’approche :

sh

zeroclaw config list                          # charge la configuration ; tout échec de validation est affiché sur stderr
zeroclaw models refresh --model-provider <type>.<alias>   # list models the endpoint advertises
zeroclaw agent -a <alias> -m "hello"          # test de validation avec l'agent à `[agents.<alias>]`

Implémentation d’un nouveau trait ModelProvider

Si le point de terminaison n’est pas compatible avec OpenAI et ne fait pas partie des emplacements de serveur local, vous devez écrire du code.

Le trait se trouve dans crates/zeroclaw-api/src/model_provider.rs :

#![allow(unused)]
fn main() {
#[async_trait]
pub trait ModelProvider: Send + Sync {
    fn name(&self) -> &str;
    fn supports_streaming(&self) -> bool { true }
    fn supports_streaming_tool_events(&self) -> bool { false }

    async fn chat(
        &self,
        messages: Vec<Message>,
        tools: Vec<ToolSchema>,
        options: ChatOptions,
    ) -> Pin<Box<dyn Stream<Item = Result<StreamEvent>> + Send>>;
}
}

Schéma d’implémentation :

  1. Définissez la configuration typée dans crates/zeroclaw-config/src/schema.rs :

    #![allow(unused)]
    fn main() {
    pub struct MyProviderModelProviderConfig {
        #[serde(flatten)]
        pub base: ModelProviderConfig,
        pub endpoint: MyProviderEndpoint,
        // champs spécifiques à la famille
    }
    
    pub enum MyProviderEndpoint { Default }
    impl ModelEndpoint for MyProviderEndpoint {
        fn uri(&self) -> &'static str {
            match self { Self::Default => "https://my-provider.example.com/v1" }
        }
    }
    }
  2. Ajoutez le slot à for_each_model_provider_slot! dans crates/zeroclaw-config/src/providers.rs. Chaque helper récupère automatiquement le nouveau slot.

  3. Ajoutez l’implémentation runtime dans crates/zeroclaw-providers/src/myprovider.rs. Convertissez Vec<Message> au format wire, diffusez la réponse, émettez des valeurs StreamEvent.

  4. Connectez la branche factory dans crates/zeroclaw-providers/src/lib.rs::create_provider_with_url_and_options.

  5. Ajoutez un feature flag dans Cargo.toml si le fournisseur entraîne des dépendances lourdes.

Voir anthropic.rs comme référence pour un fournisseur avec un format filaire entièrement personnalisé. Voir compatible.rs pour le pattern de streaming SSE compatible OpenAI.

Dépannage

Erreurs d’authentification

  • Vérifiez que la clé API correspond au point de terminaison (de nombreux fournisseurs utilisent des préfixes de clé : sk-, gsk_, sk-ant-).
  • Vérifiez que uri inclut le schéma (http:// / https://) et le chemin /v1 si le point de terminaison l’attend.
  • Endpoints derrière un VPN ou un proxy ? Vérifiez le routage depuis l’hôte ZeroClaw.

Modèle non trouvé

  • Listez ce que l’endpoint annonce :

sh

  curl -sS "$URI/models" -H "Authorization : Bearer $API_KEY" | jq
- If the endpoint doesn't implement `/models`, send a direct chat request and read the error, most endpoints return the expected model family in the error body. - Gateway services often expose only a subset of upstream models.

Problèmes de connexion

  • curl -I $URI, répond-il ?
  • Pare-feu, proxy, règles de sortie ? Les fournisseurs de VPS bloquent parfois les ports élevés sortants.
  • Page d’état du fournisseur s’il s’agit d’un service hébergé.

La passerelle rejette temperature

Certaines passerelles (par ex. un proxy LiteLLM placé devant claude-opus-4-7) renvoient une erreur dès qu’un champ temperature est présent. ZeroClaw respecte le contrat Option : si vous laissez temperature non défini dans la configuration, le champ est entièrement omis du corps de la requête et le backend choisit sa propre valeur par défaut. Ne définissez temperature explicitement que lorsque le point de terminaison l’accepte.

Voir aussi

  • Overview : modèle de fournisseur et fonctionnement de la répartition par agent
  • Configuration : schéma complet [providers.*], configuration typée Azure, variantes régionales et OAuth
  • Catalogue : chaque emplacement canonique avec un exemple TOML détaillé
  • Développement → Protocole de plugin : si un plugin fonctionne mieux qu’une crate de première classe