diff --git a/docs/gateway/config-tools.md b/docs/gateway/config-tools.md index b80cf90af10c..7567fcd5b44d 100644 --- a/docs/gateway/config-tools.md +++ b/docs/gateway/config-tools.md @@ -579,8 +579,8 @@ Configuring a custom/local provider `baseUrl` is also the narrow network trust d | `requiresAssistantAfterToolResult` | Requires an assistant message after tool results. | | `requiresThinkingAsText` | Replays reasoning as text rather than structured content. | | `requiresReasoningContentOnAssistantMessages` | Preserves DeepSeek-style `reasoning_content` during replay. | - | `toolSchemaProfile` | Selects a provider-defined tool-schema normalization profile. | - | `unsupportedToolSchemaKeywords` | Removes named JSON Schema keywords rejected by the endpoint. | + | `toolSchemaProfile` | Selects a tool-schema normalization profile. Custom model entries recognize `llamacpp` and `gemini`. The `llamacpp` profile removes `pattern` and `maxLength` values at or above 2000; built-in `llama-cpp`, `ollama`, and `lmstudio` providers apply the same cleaner automatically. Custom `llama-server` models must select it explicitly. See the llama.cpp example below. | + | `unsupportedToolSchemaKeywords` | Removes named JSON Schema keywords rejected by the endpoint before tool schemas are sent. Use this for endpoint-specific gaps beyond a profile's targeted transformations. | | `toolCallArgumentsEncoding` | Selects the endpoint's tool-call argument encoding. | | `requiresOpenAiAnthropicToolPayload` | Converts OpenAI-shaped tool calls to Anthropic-family payloads. | @@ -655,6 +655,44 @@ Interactive custom-provider onboarding infers image input for known vision-model Anthropic-compatible, built-in provider. Shortcut: `openclaw onboard --auth-choice kimi-code-api-key`. + + + Point a **custom** `openai-completions` provider at a remote `llama-server` (or another OpenAI-compatible llama.cpp endpoint). The built-in `llama-cpp`, `ollama`, and `lmstudio` providers apply the llama.cpp schema cleaner automatically; a custom endpoint does not. Set `compat.toolSchemaProfile: "llamacpp"` on each model whose llama-server chat template compiles tool arguments into GBNF. The profile removes `pattern` and `maxLength` values at or above 2000, covering the `cron` tool's `trigger.script` limit of 65536. It is a targeted mitigation, not complete compatibility for every JSON Schema constraint or `minLength`. + + ```json5 + { + agents: { + defaults: { + model: { primary: "my-llamacpp/qwen35" }, + }, + }, + models: { + mode: "merge", + providers: { + "my-llamacpp": { + baseUrl: "http://127.0.0.1:8080/v1", + apiKey: "llamacpp-no-key", + api: "openai-completions", + models: [ + { + id: "qwen35", + name: "Qwen3.5 (llama-server)", + contextWindow: 8192, + maxTokens: 2048, + compat: { + supportsTools: true, + toolSchemaProfile: "llamacpp", + }, + }, + ], + }, + }, + }, + } + ``` + + On older builds without `toolSchemaProfile`, the broader fallback is `compat.unsupportedToolSchemaKeywords: ["pattern", "patternProperties", "format", "propertyNames", "uniqueItems", "contains", "minContains", "maxContains", "minLength", "maxLength"]`. Unlike the profile, this removes every listed keyword unconditionally. + See [Local Models](/gateway/local-models). TL;DR: run a large local model via LM Studio Responses API on serious hardware; keep hosted models merged for fallback.