Proveedores personalizados
Tres formas de agregar un proveedor que ZeroClaw no incluye:
- Usa el slot
custom. Para cualquier endpoint compatible con OpenAI que no esté cubierto por un slot canónico existente. - Usa los slots de servidor local de primera clase (
lmstudio,llamacpp,sglang,vllm,osaurus,litellm). Envoltorios ligeros con valores predeterminados sensatos. - Implementa el trait
ModelProvideren Rust. Para cualquier cosa que no sea compatible con OpenAI.
Endpoint compatible con OpenAI: use el slot custom
Si el servicio habla chat-completions de OpenAI, este es un cambio que solo afecta a la configuración. El slot custom requiere uri (el enum de endpoint de la familia no tiene valor predeterminado); referéncielo desde el model_provider de un agente.
Esta es la misma implementación en tiempo de ejecución de OpenAiCompatibleModelProvider utilizada por groq, mistral, xai y cualquier otro proveedor con su propio espacio canónico en el catálogo. La diferencia está en qué espacio de familia usas: custom es el comodín para endpoints no representados por un espacio de proveedor.
Para una puerta de enlace que no puede aceptar resultados de herramientas que contienen imágenes, omite esas cargas útiles y conserva el texto circundante de la herramienta:
[providers.models.custom.gateway]
uri = "https://gateway.example.com/v1"
model = "my-model"
tool_result_image_policy = "omit"
Servidores de inferencia local de primera clase
ZeroClaw incluye slots canónicos para los stacks de inferencia local más populares. Internamente todos son compatibles con OpenAI, pero con valores uri predeterminados ya aplicados, por lo que normalmente puedes omitir uri por completo.
llama.cpp: slot llamacpp
sh
llama-server -hf ggml-org/gpt-oss-20b-GGUF --jinja -c 133000 --host 127.0.0.1 --port 8033
Campos opcionales se aplican a cualquier familia de compat-slot (incluyendo llamacpp). El conjunto completo, derivado del esquema:
api_key 🔑
Token API secreto para este model_provider. Obténgalo desde el panel de control del model_provider (plataforma de OpenAI, consola de Anthropic, página de claves de OpenRouter, etc.). Se almacena mediante el keyring del sistema operativo cuando es posible; nunca lo incluya directamente en config.toml.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y configure el campo providers.models.custom.<alias>.api_key.
zerocode
En el panel Config, establece el campo providers.models.custom.<alias>.api_key.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.api_key # entrada enmascarada, almacenada cifrada
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__api_key=
chat_template_kwargs
Pares arbitrarios de clave/valor reenviados sin modificaciones como un objeto de nivel superior chat_template_kwargs en el cuerpo de la solicitud de proveedores compatibles con OpenAI. Los backends compatibles con plantillas de chat, como vLLM, SGLang y llama.cpp, lo utilizan para pasar variables de plantilla específicas de la familia del modelo que controlan comportamientos no expuestos por otros campos. Debe ser un objeto JSON (tabla insertada de TOML); los valores que no sean objetos se ignoran y se muestra una advertencia. Ejemplo (supresión del razonamiento de Qwen3): chat_template_kwargs = { enable_thinking = false }
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.chat_template_kwargs.
zerocode
En el panel Config, establece el campo providers.models.custom.<alias>.chat_template_kwargs.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.chat_template_kwargs <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__chat_template_kwargs=
context_window
Tamaño de la ventana de contexto (máximo de tokens de entrada) para este modelo. Se rellena automáticamente durante la configuración desde el endpoint /models del proveedor, si está disponible. Sobrescribe manualmente para endpoints personalizados o cuando la detección automática falla.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y establece el campo providers.models.custom.<alias>.context_window.
zerocode
En el panel Config, establece el campo providers.models.custom.<alias>.context_window.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.context_window <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__context_window=
extra_headers 🔑
Encabezados HTTP adicionales que se envían con cada solicitud. Caso de nicho: se usa para puentes de autenticación, proxies corporativos o gateways personalizados que exigen un encabezado de rastreo. La mayoría de los usuarios nunca lo modifican; edite config.toml directamente si lo necesita.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.extra_headers.
zerocode
En el panel Config, establece el campo providers.models.custom.<alias>.extra_headers.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.extra_headers # entrada enmascarada, almacenada cifrada
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__extra_headers=
fallback
Lista ordenada de otros alias de proveedor que se intentarán cuando todos los modelos de este alias hayan fallado. Cada entrada es una referencia con puntos <type>.<alias> dentro de providers.models y se resuelve con sus propias credenciales, endpoint y modelo. Un fallback nunca hereda la clave de este alias. El recorrido es en profundidad: primero se agotan los modelos de este alias, luego se desciende por cada alias de fallback en orden (aplicando sus propios fallback_models y fallback). Vacío significa que no hay fallback a nivel de proveedor.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y establece el campo providers.models.custom.<alias>.fallback.
zerocode
En el panel Config, configura el campo providers.models.custom.<alias>.fallback.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.fallback <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__fallback=
fallback_models
Modelos alternativos ordenados para probar en ESTE proveedor antes de recurrir a los alias de fallback. Mismo endpoint, clave y encabezados que el model principal. Solo cambia el identificador del modelo. Usa esto cuando un proveedor ofrece un modelo de respaldo (p. ej., una variante más pequeña o antigua) que debería probarse antes de abandonar el proveedor por completo. Vacío significa que solo se prueba model.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y configure el campo providers.models.custom.<alias>.fallback_models.
zerocode
En el panel Config, establece el campo providers.models.custom.<alias>.fallback_models.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.fallback_models <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__fallback_models=
kind
Implementación de proveedor a instanciar para este perfil. Use esto cuando un slot tipado canónico deba ejecutarse a través de una implementación compatible, p. ej. [providers.models.openai.proxy] kind = "openai-compatible".
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.kind.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.kind.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.kind <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__kind=
live_pricing
Obtén los precios de tokens en vivo para los modelos de este proveedor desde su propio listado /models compatible con OpenAI (la pasarela es la fuente de verdad de sus precios), completando las tarifas de seguimiento de costes para los modelos que el operador NO haya fijado bajo [cost.rates] / pricing. Los modelos que la pasarela no tarifa (o los proveedores sin ningún listado HTTP /models, como una pasarela de subproceso como kilocli) recurren al catálogo público de models.dev. Las tarifas configuradas siempre prevalecen; los precios en vivo solo rellenan los huecos. Una tarea en segundo plano actualiza la instantánea de precios cada hora; la ruta de registro de costes lee la instantánea en caché y nunca bloquea en la red. Predeterminado false: desactivado significa que no hay obtención y el comportamiento es idéntico al de una compilación sin la función.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Open /config/providers.models/custom and establece el campo providers.models.custom.<alias>.live_pricing.
zerocode
En el panel de Config, establece el campo providers.models.custom.<alias>.live_pricing.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.live_pricing <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__live_pricing=
max_tokens
Límite estricto de la longitud de respuesta en tokens. La mayoría de los modelos ya aplican límites integrados razonables; déjelo sin configurar a menos que necesite específicamente recortar salidas largas por razones de costo o latencia.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.max_tokens.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.max_tokens.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.max_tokens <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__max_tokens=
merge_system_into_user
Particularidad específica de ModelProvider: incorpora el prompt del sistema en el primer mensaje del usuario en lugar de enviar un rol system separado. Solo es necesario para modelos que rechazan (o manejan incorrectamente) un rol system independiente, p. ej., ciertas variantes antiguas de Mistral.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.merge_system_into_user.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.merge_system_into_user.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.merge_system_into_user <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__merge_system_into_user=
model
Identificador de modelo que se envía con cada solicitud: la cadena de ID del catálogo del model_provider (p. ej. gpt-4o, claude-sonnet-4-5, llama-3.3-70b). Debe coincidir con un modelo que el model_provider realmente sirva en esta cuenta.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.model.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.model.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.model <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__model=
native_tools
Anula el valor predeterminado del proveedor para las llamadas nativas a herramientas. None (predeterminado) respeta la opción integrada del proveedor. Some(true) fuerza la activación de las llamadas nativas a herramientas, Some(false) fuerza el fallback a texto. Actualmente solo lo consulta la factory de Groq, que usa por defecto el fallback a texto porque los modelos de Groq de la familia llama rechazan las llamadas nativas a herramientas con HTTP 400. Establecer native_tools = true vuelve a habilitar las llamadas nativas a herramientas para los modelos de Groq que las admiten.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.native_tools.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.native_tools.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.native_tools <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__native_tools=
pricing
Precios por modelo para el seguimiento de costos, en USD por 1M de tokens. Mapa de clave/valor de formato libre. Las claves son identificadores de modelo definidos por el usuario; un sufijo opcional .input / .output codifica la dimensión de precios cuando el operador desea dividir las tarifas. Una clave sin sufijo se usa como tarifa plana por token cuando no se especifica ninguna dimensión. El valor predeterminado es vacío: el seguimiento de costos recurre a tarifas “unknown” y solo se registra el uso de tokens. Ejemplo: pricing = { opus = 15.0, sonnet = 3.0 } O dividido: pricing = { "opus.input" = 15.0, "opus.output" = 75.0 }
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.pricing.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.pricing.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.pricing <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__pricing=
provider_extra
Parámetros JSON adicionales para incluir en las solicitudes a la API. Se fusionan en el nivel superior del cuerpo de la solicitud, lo que permite funciones específicas del proveedor (enrutamiento, transformaciones, etc.) sin cambios en el código. Ejemplo: provider_extra = { model_provider = { only = ["Anthropic"] } }
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.provider_extra.
zerocode
En el panel Config, establezca el campo providers.models.custom.<alias>.provider_extra.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.provider_extra <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__provider_extra=
replay_assistant_reasoning
Si debe reproducirse el razonamiento del asistente almacenado en los mensajes salientes del historial del asistente. Some(false) elimina reasoning_content y reasoning antes de enviarlos. None (predeterminado) respeta el valor predeterminado integrado del proveedor (true para la mayoría de los proveedores compatibles, false para Groq).
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y establezca el campo providers.models.custom.<alias>.replay_assistant_reasoning.
zerocode
En el panel de Config, establece el campo providers.models.custom.<alias>.replay_assistant_reasoning.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.replay_assistant_reasoning <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__replay_assistant_reasoning=
requires_openai_auth
Cuando es verdadero, el cliente toma las credenciales del perfil de autenticación openai-codex almacenado de ZeroClaw en lugar del campo api_key anterior. Importe un inicio de sesión existente de Codex CLI con zeroclaw auth login --model-provider openai-codex --import ~/.codex/auth.json, o ejecute zeroclaw auth login --model-provider openai-codex. Actívelo solo para el model_provider de OpenAI Codex; déjelo desactivado para los model_providers estándar de clave de API.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.requires_openai_auth.
zerocode
En el panel Config, establece el campo providers.models.custom.<alias>.requires_openai_auth.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.requires_openai_auth <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__requires_openai_auth=
temperature
Temperatura de muestreo que se pasa al modelo. Los valores más bajos (0.0–0.3) producen una salida determinista, casi literal, adecuada para código, enrutamiento y resúmenes. Los valores más altos (0.7–1.2) producen una salida más variada, adecuada para conversaciones abiertas.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y configure el campo providers.models.custom.<alias>.temperature.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.temperature.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.temperature <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__temperature=
think
Habilita o deshabilita el pensamiento en cadena (chain-of-thought) para los modelos que lo admiten (p. ej., Qwen3, GLM-4). true activa el pensamiento, false lo desactiva. None (predeterminado) deja que el modelo decida. Se envía como enable_thinking en el cuerpo de la solicitud; refleja el campo think del proveedor Ollama.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.think.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.think.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.think <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__think=
timeout_secs
Tiempo de espera de la solicitud HTTP en segundos. Aumenta este valor para model_providers locales lentos (Ollama en CPU, modelos locales grandes) o redes de alta latencia; déjalo sin configurar en caso contrario.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y configura el campo providers.models.custom.<alias>.timeout_secs.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.timeout_secs.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.timeout_secs <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__timeout_secs=
tls_ca_cert_path
Ruta a un certificado de CA codificado en PEM para conexiones TLS a este proveedor. Debe ser una ruta absoluta; no se realiza expansión de shell (p. ej. ~). Déjelo sin configurar para usar el almacén de confianza predeterminado del sistema.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y configure el campo providers.models.custom.<alias>.tls_ca_cert_path.
zerocode
En el panel Config, establece el campo providers.models.custom.<alias>.tls_ca_cert_path.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.tls_ca_cert_path <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__tls_ca_cert_path=
tool_result_image_policy
Cómo gestionan los proveedores de chat-completions compatibles de forma nativa los marcadores de imagen en los resultados de role=tool. image_url conserva las partes de imagen estructuradas; omit elimina sus cargas útiles y añade un aviso fijo. Esto no afecta al contenido de imagen directo del usuario ni a los proveedores de OpenAI Responses.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y establezca el campo providers.models.custom.<alias>.tool_result_image_policy.
zerocode
En el panel Config, configura el campo providers.models.custom.<alias>.tool_result_image_policy.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.tool_result_image_policy <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__tool_result_image_policy=
uri
URI del endpoint al que accede el cliente. Sobrescriba el endpoint predeterminado de la familia cuando apunte a un gateway autoalojado (LiteLLM, vLLM, Ollama), un proxy personalizado o cualquier URL no estándar. Déjelo sin definir para usar el URI predeterminado de la familia desde su implementación de ModelEndpoint. Establezca aquí la URL COMPLETA del endpoint; no existe un campo separado para el sufijo de ruta.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y configure el campo providers.models.custom.<alias>.uri.
zerocode
En el panel Config, configure el campo providers.models.custom.<alias>.uri.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.uri <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__uri=
vision
Anula la capacidad de visión (entrada de imágenes) del proveedor. None (predeterminado) usa el valor predeterminado integrado de la familia de proveedores. Varias familias (llama.cpp, el endpoint genérico compatible con OpenAI, etc.) asumen capacidad de visión porque pueden servir modelos multimodales. Establece vision = false para un modelo de solo texto servido por dicha familia (p. ej., un LLM de texto detrás de llama.cpp) para que los mensajes de imagen se enruten a un [multimodal] vision_model_provider configurado en lugar de enviarse a un modelo que los rechaza. Some(true) fuerza la activación de visión.
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abre /config/providers.models/custom y establece el campo providers.models.custom.<alias>.vision.
zerocode
En el panel Config, establezca el campo providers.models.custom.<alias>.vision.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.vision <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__vision=
wire_api
Colócalo sobre cualquier superficie:
Panel de control del gateway
Abra /config/providers.models/custom y configure el campo providers.models.custom.<alias>.wire_api.
zerocode
En el panel Config, configura el campo providers.models.custom.<alias>.wire_api.
zeroclaw config
zeroclaw config set providers.models.custom.<alias>.wire_api <value>
Variable de entorno
Exporte la anulación (shells POSIX; colóquelo en ~/.bashrc, ~/.zshrc, .env o un Dockerfile). Reemplace <alias> con el alias literal:
export ZEROCLAW_providers__models__custom__<alias>__wire_api=
Controlar el modo de pensamiento varía según la familia de modelos. think = false establece el campo enable_thinking de nivel superior en la solicitud. Algunos modelos (p. ej. Qwen3) leen esta marca desde la plantilla Jinja mediante chat_template_kwargs en su lugar:
Otras familias de modelos usan nombres de variables de plantilla diferentes; consulte la plantilla de chat de su modelo y configure la clave apropiada en chat_template_kwargs.
SGLang: ranura sglang
sh
python -m sglang.launch_server --model meta-llama/Llama-3.1-8B-Instruct --port 30000
vLLM: ranura vllm
sh
vllm serve meta-llama/Llama-3.1-8B-Instruct
LM Studio, Osaurus, LiteLLM
Los slots lmstudio, osaurus, litellm siguen el mismo patrón, consulte el catálogo.
Protocolo de comunicación: wire_api = "responses"
Los nuevos slots del proveedor OpenAI que se escriben en la configuración (providers.models.openai.<alias>, creados por zeroclaw quickstart o la interfaz de configuración/gateway) usan wire_api = "responses" de forma predeterminada, ya que los modelos GPT recientes de OpenAI emplean POST /v1/responses como wire principal. Los demás slots de endpoint propio (custom, llamacpp y vendedores compatibles con OpenAI) siguen usando el wire de chat-completions de forma predeterminada; un endpoint que solo hable el wire de responses de OpenAI (algunos despliegues autoalojados de vLLM / TGI) requiere una activación explícita mediante wire_api = "responses" en la entrada del alias.
Cuando se establece en "responses", el proveedor se construye como un OpenAiResponsesModelProvider (llamadas a herramientas con streaming completo sobre el protocolo responses) en lugar de un proveedor chat-completions. Establece "chat_completions" para forzar el protocolo heredado. Dos casos mantienen chat-completions en tiempo de ejecución por compatibilidad con versiones anteriores, por lo que ninguna configuración existente cambia de protocolo al actualizar:
- Una entrada persistida
providers.models.openai.<alias>que omitewire_apise deserializa como no establecida y permanece en chat-completions. - Una referencia
model_provider = "openai"simple (o una referencia con puntos a un alias inexistente) no tiene ninguna entrada de configuración que leer; se construye a partir del fallback de la familia y permanece en chat-completions. El valor predeterminado de responses solo se aplica cuando un slot se escribe realmente en la configuración.
wire_api se respeta en las familias bring-your-own-endpoint donde el wire es configurable por el operador: openai, llamacpp y custom (además de la ruta genérica compatible con openai). Los slots de proveedores de marca (groq, mistral, deepseek, …) tienen un protocolo wire fijo e ignoran el campo, con una excepción: opencode respeta wire_api = "responses" porque OpenCode Zen sirve ambos wires. Sin una anulación de uri, la ruta de responses de OpenCode apunta a https://opencode.ai/zen/v1/responses:
[providers.models.opencode.default]
model = "big-pickle"
wire_api = "responses"
El ajuste rige tanto la ruta del agente principal como los destinos delegados, por lo que un delegado cuyo alias de destino declara wire_api = "responses" alcanza el endpoint a través de la interfaz responses.
Validación
Independientemente del enfoque:
sh
zeroclaw config list # carga la configuración; cualquier fallo de validación se imprime en stderr
zeroclaw models refresh --model-provider <type>.<alias> # list models the endpoint advertises
zeroclaw agent -a <alias> -m "hello" # prueba de humo contra el agente en `[agents.<alias>]`
Implementación de un nuevo trait ModelProvider
Si el endpoint no es compatible con OpenAI y no es uno de los slots de servidor local, necesitas código.
El trait se encuentra en 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>>;
}
}
Patrón de implementación:
-
Define la configuración tipada en
crates/zeroclaw-config/src/schema.rs:#![allow(unused)] fn main() { pub struct MyProviderModelProviderConfig { #[serde(flatten)] pub base: ModelProviderConfig, pub endpoint: MyProviderEndpoint, // campos específicos de la familia } pub enum MyProviderEndpoint { Default } impl ModelEndpoint for MyProviderEndpoint { fn uri(&self) -> &'static str { match self { Self::Default => "https://my-provider.example.com/v1" } } } } -
Agrega el slot a
for_each_model_provider_slot!encrates/zeroclaw-config/src/providers.rs. Cada helper detecta el nuevo slot automáticamente. -
Agrega la implementación del runtime en
crates/zeroclaw-providers/src/myprovider.rs. TraduceVec<Message>al formato de transmisión, transmite la respuesta y emite valoresStreamEvent. -
Conecta la rama de fábrica en
crates/zeroclaw-providers/src/lib.rs::create_provider_with_url_and_options. -
Agrega un feature flag en
Cargo.tomlsi el proveedor incorpora dependencias pesadas.
Consulta anthropic.rs como referencia para un proveedor con un formato de transmisión completamente personalizado. Consulta compatible.rs para el patrón de transmisión SSE compatible con OpenAI.
Solución de problemas
Errores de autenticación
- Verifica que la clave de API coincida con el endpoint (muchos proveedores usan prefijos de clave:
sk-,gsk_,sk-ant-). - Comprueba que
uriincluya el esquema (http:///https://) y la ruta/v1si el endpoint lo espera. - ¿Endpoints detrás de una VPN o proxy? Confirma el enrutamiento desde el host de ZeroClaw.
Modelo no encontrado
- Lista lo que anuncia el endpoint:
sh
curl -sS "$URI/models" -H "Authorization: Bearer $API_KEY" | jq
Problemas de conexión
curl -I $URI, ¿responde?- ¿Firewall, proxy, reglas de salida? Los proveedores de VPS a veces bloquean los puertos altos salientes.
- Página de estado del proveedor si es un servicio alojado.
El gateway rechaza temperature
Algunos gateways (p. ej., un proxy de LiteLLM que actúa como frontal de claude-opus-4-7) devuelven un error cuando el campo temperature está presente de cualquier forma. ZeroClaw respeta el contrato de Option: si dejas temperature sin establecer en la configuración, el campo se omite por completo del cuerpo de la solicitud y el backend elige su propio valor predeterminado. Establece temperature explícitamente solo cuando el endpoint lo acepte.
Ver también
- Overview: modelo de proveedor y cómo funciona el despacho por agente
- Configuración: esquema completo de
[providers.*], configuración tipada de Azure, variantes regionales y de OAuth - Catálogo: cada slot canónico con un ejemplo TOML resuelto
- Developing → Protocolo de plugins: si un plugin funciona mejor que un crate de primera clase