From 05204c54b6b7c92828419c05fd77f383c9c2172c Mon Sep 17 00:00:00 2001 From: sharon wang <25834218+sharon-wang@users.noreply.github.com> Date: Tue, 25 Aug 2026 11:11:52 -0400 Subject: [PATCH 1/4] Describe every user-addressable field in providers.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Zod schema had no `.describe()` calls at all — every bit of prose lived in TSDoc, which Zod cannot see, so `providers.schema.json` shipped as a bare type listing. Anything generated from it was strictly worse than hand-written docs, which blocked generating a providers.json reference for the Assistant docs site. Descriptions are sourced from the existing TSDoc where it existed, from the hand-written Provider Settings section of the docs site, and from the bridge's ModelInfo comments. They avoid the `"` character so downstream consumers can quote them without escaping. The coverage test walks the generated JSON Schema and throws on any construct it does not explicitly handle, so an unsupported shape fails loudly instead of being skipped into vacuous success. It found eight genuinely undescribed fields (the capability section objects) that a field-count baseline would have missed. Also adds a CI guard: ai-config's `prebuild` regenerates the schema into the working tree and never diffs it, so a schema.ts change could merge against a stale artifact with CI green. The guard diffs against HEAD rather than the working tree, since `build` has already refreshed the file by that point. --- .github/workflows/ci.yml | 10 + packages/ai-config/providers.schema.json | 1430 +++++++++++++++++ .../src/__tests__/schema-descriptions.test.ts | 220 +++ packages/ai-config/src/schema.ts | 335 +++- 4 files changed, 1926 insertions(+), 69 deletions(-) create mode 100644 packages/ai-config/src/__tests__/schema-descriptions.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 388ee38..5173c31 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,16 @@ jobs: - name: Build dependencies run: npm run build -w ai-config -w ai-credentials + # providers.schema.json is source-controlled and consumed directly by + # editors and the Assistant docs generator, so a stale commit is a real + # bug. Diff against HEAD rather than the working tree: `build` above + # already regenerated the file via ai-config's prebuild, so a + # working-tree comparison would always pass. + - name: Check providers.schema.json is up to date + run: | + npm run generate-schema -w ai-config + git diff --exit-code HEAD -- packages/ai-config/providers.schema.json + - name: Type check run: npm run check-types -w ai-provider-bridge diff --git a/packages/ai-config/providers.schema.json b/packages/ai-config/providers.schema.json index 9b5daa3..913b033 100644 --- a/packages/ai-config/providers.schema.json +++ b/packages/ai-config/providers.schema.json @@ -5,37 +5,49 @@ "description": "Configuration file for AI provider connections, enablement, and model overrides. See https://github.com/posit-dev/assistant for documentation.", "properties": { "$schema": { + "description": "Path or URL of the JSON Schema for this file. Editors use it for validation and autocomplete.", "type": "string" }, "providers": { "additionalProperties": false, + "description": "Provider configuration, keyed by built-in provider id, plus the reserved `default` and `custom` keys.", "properties": { "anthropic": { "additionalProperties": false, + "description": "Configuration for the built-in anthropic provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -50,47 +62,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -102,24 +125,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -140,12 +169,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -157,30 +188,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -192,24 +230,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -218,7 +262,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -227,6 +273,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -242,42 +289,55 @@ }, "bedrock": { "additionalProperties": false, + "description": "Configuration for the built-in bedrock provider.", "properties": { "aws": { "additionalProperties": false, + "description": "AWS connection settings for Bedrock. Credentials are not stored here.", "properties": { "profile": { + "description": "Named profile from your AWS config and credentials files.", "type": "string" }, "region": { + "description": "AWS region to call, such as `us-east-1`.", "type": "string" } }, "type": "object" }, "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -292,47 +352,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -344,24 +415,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -382,12 +459,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -399,30 +478,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -434,24 +520,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -460,7 +552,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -469,6 +563,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -714,30 +809,40 @@ }, "copilot": { "additionalProperties": false, + "description": "Configuration for the built-in copilot provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -752,47 +857,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -804,24 +920,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -842,12 +964,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -859,30 +983,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -894,24 +1025,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -920,7 +1057,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -929,6 +1068,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -949,28 +1089,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -993,47 +1142,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1045,24 +1205,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1083,12 +1249,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -1100,30 +1268,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1135,24 +1310,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1161,7 +1342,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -1170,6 +1353,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1182,6 +1366,7 @@ }, "type": { "const": "openai-compatible", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -1194,28 +1379,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1238,47 +1432,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1290,24 +1495,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1328,12 +1539,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -1345,30 +1558,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1380,24 +1600,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1406,7 +1632,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -1415,6 +1643,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1427,6 +1656,7 @@ }, "type": { "const": "anthropic", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -1439,28 +1669,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1483,47 +1722,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1535,24 +1785,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1573,12 +1829,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -1590,30 +1848,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1625,24 +1890,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1651,7 +1922,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -1660,6 +1933,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1672,6 +1946,7 @@ }, "type": { "const": "openai", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -1684,28 +1959,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1728,47 +2012,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1780,24 +2075,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1818,12 +2119,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -1835,30 +2138,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1870,24 +2180,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -1896,7 +2212,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -1905,6 +2223,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1917,6 +2236,7 @@ }, "type": { "const": "gemini", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -1930,39 +2250,51 @@ "properties": { "aws": { "additionalProperties": false, + "description": "AWS connection settings for Bedrock. Credentials are not stored here.", "properties": { "profile": { + "description": "Named profile from your AWS config and credentials files.", "type": "string" }, "region": { + "description": "AWS region to call, such as `us-east-1`.", "type": "string" } }, "type": "object" }, "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -1985,47 +2317,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2037,24 +2380,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2075,12 +2424,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -2092,30 +2443,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2127,24 +2485,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2153,7 +2517,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -2162,6 +2528,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2174,6 +2541,7 @@ }, "type": { "const": "aws", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -2186,28 +2554,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2230,47 +2607,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2282,24 +2670,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2320,12 +2714,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -2337,30 +2733,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2372,24 +2775,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2398,7 +2807,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -2407,6 +2818,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2419,17 +2831,22 @@ }, "snowflake": { "additionalProperties": false, + "description": "Snowflake connection settings. Credentials are not stored here.", "properties": { "account": { + "description": "Snowflake account identifier.", "type": "string" }, "connectionName": { + "description": "Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.", "type": "string" }, "home": { + "description": "Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.", "type": "string" }, "host": { + "description": "Snowflake host name. Set this when the account identifier alone does not resolve to the right host.", "type": "string" } }, @@ -2437,6 +2854,7 @@ }, "type": { "const": "snowflake", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -2449,28 +2867,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2493,11 +2920,14 @@ }, "googleCloud": { "additionalProperties": false, + "description": "Google Cloud connection settings for Vertex AI.", "properties": { "location": { + "description": "Google Cloud region for Vertex AI, such as `us-central1`.", "type": "string" }, "project": { + "description": "Google Cloud project id for Vertex AI.", "type": "string" } }, @@ -2505,47 +2935,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2557,24 +2998,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2595,12 +3042,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -2612,30 +3061,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2647,24 +3103,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2673,7 +3135,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -2682,6 +3146,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2694,6 +3159,7 @@ }, "type": { "const": "google-vertex", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -2706,28 +3172,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2750,47 +3225,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2802,24 +3288,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2840,12 +3332,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -2857,30 +3351,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2892,24 +3393,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -2918,7 +3425,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -2927,6 +3436,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2939,6 +3449,7 @@ }, "type": { "const": "ollama", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -2951,28 +3462,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -2995,47 +3515,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3047,24 +3578,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3085,12 +3622,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -3102,30 +3641,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3137,24 +3683,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3163,7 +3715,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -3172,6 +3726,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3184,6 +3739,7 @@ }, "type": { "const": "lmstudio", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -3196,28 +3752,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3240,47 +3805,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3292,24 +3868,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3330,12 +3912,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -3347,30 +3931,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3382,24 +3973,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3408,7 +4005,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -3417,6 +4016,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3429,6 +4029,7 @@ }, "type": { "const": "deepseek", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -3441,28 +4042,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3485,47 +4095,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3537,24 +4158,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3575,12 +4202,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -3592,30 +4221,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3627,24 +4263,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3653,7 +4295,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -3662,6 +4306,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3674,6 +4319,7 @@ }, "type": { "const": "openrouter", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -3686,28 +4332,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3730,47 +4385,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3782,24 +4448,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3820,12 +4492,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -3837,30 +4511,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3872,24 +4553,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -3898,7 +4585,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -3907,6 +4596,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3919,6 +4609,7 @@ }, "type": { "const": "ms-foundry", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -3931,28 +4622,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -3975,47 +4675,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4027,24 +4738,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4065,12 +4782,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -4082,30 +4801,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4117,24 +4843,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4143,7 +4875,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -4152,6 +4886,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4164,6 +4899,7 @@ }, "type": { "const": "litellm", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -4176,28 +4912,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4220,47 +4965,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4272,24 +5028,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4310,12 +5072,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -4327,30 +5091,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4362,24 +5133,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4388,7 +5165,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -4397,6 +5176,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4409,6 +5189,7 @@ }, "type": { "const": "portkey", + "description": "Which provider client handles this entry.", "type": "string" } }, @@ -4419,46 +5200,60 @@ } ] }, + "description": "Providers you declare yourself, keyed by a name of your choosing. Available on Node-backed surfaces (Standalone, Desktop, RStudio, and the Terminal); Positron does not expose custom providers.", "propertyNames": { + "description": "Name of your choosing, also used as the display name.", "type": "string" }, "type": "object" }, "databricks": { "additionalProperties": false, + "description": "Configuration for the built-in databricks provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "databricks": { "additionalProperties": false, + "description": "Databricks workspace settings.", "properties": { "host": { + "description": "Databricks workspace host. This is not a chat base URL: the serving-endpoint URL is derived from it.", "type": "string" } }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4473,47 +5268,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4525,24 +5331,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4563,12 +5375,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -4580,30 +5394,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4615,24 +5436,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4641,7 +5468,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -4650,6 +5479,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4665,30 +5495,40 @@ }, "deepseek": { "additionalProperties": false, + "description": "Configuration for the built-in deepseek provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4703,47 +5543,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4755,24 +5606,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4793,12 +5650,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -4810,30 +5669,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4845,24 +5711,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -4871,7 +5743,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -4880,6 +5754,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4895,8 +5770,10 @@ }, "default": { "additionalProperties": false, + "description": "Baseline applied to every provider that does not set the same key itself.", "properties": { "enabled": { + "description": "Default enablement for providers that do not set `enabled` themselves.", "type": "boolean" } }, @@ -4904,30 +5781,40 @@ }, "gemini": { "additionalProperties": false, + "description": "Configuration for the built-in gemini provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4942,47 +5829,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -4994,24 +5892,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5032,12 +5936,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -5049,30 +5955,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5084,24 +5997,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5110,7 +6029,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -5119,6 +6040,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5134,30 +6056,40 @@ }, "google-vertex": { "additionalProperties": false, + "description": "Configuration for the built-in google-vertex provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5172,11 +6104,14 @@ }, "googleCloud": { "additionalProperties": false, + "description": "Google Cloud connection settings for Vertex AI.", "properties": { "location": { + "description": "Google Cloud region for Vertex AI, such as `us-central1`.", "type": "string" }, "project": { + "description": "Google Cloud project id for Vertex AI.", "type": "string" } }, @@ -5184,47 +6119,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5236,24 +6182,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5274,12 +6226,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -5291,30 +6245,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5326,24 +6287,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5352,7 +6319,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -5361,6 +6330,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5376,30 +6346,40 @@ }, "litellm": { "additionalProperties": false, + "description": "Configuration for the built-in litellm provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5414,47 +6394,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5466,24 +6457,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5504,12 +6501,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -5521,30 +6520,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5556,24 +6562,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5582,7 +6594,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -5591,6 +6605,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5606,30 +6621,40 @@ }, "lmstudio": { "additionalProperties": false, + "description": "Configuration for the built-in lmstudio provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5644,47 +6669,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5696,24 +6732,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5734,12 +6776,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -5751,30 +6795,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5786,24 +6837,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5812,7 +6869,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -5821,6 +6880,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5836,6 +6896,7 @@ }, "ms-foundry": { "additionalProperties": false, + "description": "Configuration for the built-in ms-foundry provider.", "properties": { "azure": { "additionalProperties": false, @@ -5857,28 +6918,37 @@ "type": "object" }, "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5893,47 +6963,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -5945,24 +7026,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -5983,12 +7070,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -6000,30 +7089,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6035,24 +7131,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6061,7 +7163,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -6070,6 +7174,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6085,30 +7190,40 @@ }, "ollama": { "additionalProperties": false, + "description": "Configuration for the built-in ollama provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6123,47 +7238,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6175,24 +7301,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6213,12 +7345,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -6230,30 +7364,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6265,24 +7406,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6291,7 +7438,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -6300,6 +7449,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6315,30 +7465,40 @@ }, "openai": { "additionalProperties": false, + "description": "Configuration for the built-in openai provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6353,47 +7513,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6405,24 +7576,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6443,12 +7620,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -6460,30 +7639,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6495,24 +7681,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6521,7 +7713,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -6530,6 +7724,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6545,30 +7740,40 @@ }, "openai-compatible": { "additionalProperties": false, + "description": "Configuration for the built-in openai-compatible provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6583,47 +7788,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6635,24 +7851,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6673,12 +7895,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -6690,30 +7914,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6725,24 +7956,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6751,7 +7988,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -6760,6 +7999,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6775,30 +8015,40 @@ }, "openrouter": { "additionalProperties": false, + "description": "Configuration for the built-in openrouter provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6813,47 +8063,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6865,24 +8126,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6903,12 +8170,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -6920,30 +8189,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -6955,24 +8231,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -6981,7 +8263,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -6990,6 +8274,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7005,30 +8290,40 @@ }, "portkey": { "additionalProperties": false, + "description": "Configuration for the built-in portkey provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7043,47 +8338,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7095,24 +8401,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -7133,12 +8445,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -7150,30 +8464,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7185,24 +8506,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -7211,7 +8538,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -7220,6 +8549,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7235,30 +8565,40 @@ }, "positai": { "additionalProperties": false, + "description": "Configuration for the built-in positai provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7273,47 +8613,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7325,24 +8676,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -7363,12 +8720,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -7380,30 +8739,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7415,24 +8781,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -7441,7 +8813,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -7451,20 +8825,25 @@ }, "positaiLogin": { "additionalProperties": false, + "description": "Posit sign-in settings for the built-in positai provider.", "properties": { "clientId": { + "description": "OAuth client id used for the device-authorization sign-in flow.", "type": "string" }, "host": { + "description": "Posit host to sign in against. The device-authorization and token URLs are derived from it.", "type": "string" }, "scope": { + "description": "Space-separated OAuth scopes requested at sign-in.", "type": "string" } }, "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7480,30 +8859,40 @@ }, "snowflake-cortex": { "additionalProperties": false, + "description": "Configuration for the built-in snowflake-cortex provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7518,47 +8907,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7570,24 +8970,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -7608,12 +9014,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -7625,30 +9033,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Largest number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Largest number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7660,24 +9075,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -7686,7 +9107,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -7695,6 +9118,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -7707,17 +9131,22 @@ }, "snowflake": { "additionalProperties": false, + "description": "Snowflake connection settings. Credentials are not stored here.", "properties": { "account": { + "description": "Snowflake account identifier.", "type": "string" }, "connectionName": { + "description": "Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.", "type": "string" }, "home": { + "description": "Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.", "type": "string" }, "host": { + "description": "Snowflake host name. Set this when the account identifier alone does not resolve to the right host.", "type": "string" } }, @@ -7731,6 +9160,7 @@ }, "version": { "const": 1, + "description": "Version of this config format. Always 1.", "type": "number" } }, diff --git a/packages/ai-config/src/__tests__/schema-descriptions.test.ts b/packages/ai-config/src/__tests__/schema-descriptions.test.ts new file mode 100644 index 0000000..f5e1c2b --- /dev/null +++ b/packages/ai-config/src/__tests__/schema-descriptions.test.ts @@ -0,0 +1,220 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (C) 2026 Posit Software, PBC. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +/** + * Every user-addressable field in providers.json must carry a `.describe()`. + * + * Descriptions are load-bearing twice over: editors show them as hover text for + * anyone hand-editing `providers.json` against the generated schema, and the + * Assistant docs site generates its providers.json reference from them. + * + * The walker below deliberately throws on any JSON Schema construct it does not + * explicitly handle. A walker that silently skips an unrecognized construct + * reports vacuous success, which is the one failure mode this test exists to + * prevent. + */ + +import { describe, it, expect } from "vitest"; +import * as z from "zod/v4"; + +import { providersConfigSchema } from "../schema.js"; + +/** + * Keywords that carry no nested schema, so the walker can stop at them. + * Anything outside this list and {@link RECURSING_KEYWORDS} is unhandled. + */ +const LEAF_KEYWORDS = new Set([ + "$id", + "$schema", + "title", + "description", + "type", + "enum", + "const", + "required", + "default", + "examples", + "deprecated", + "format", + "pattern", + "minLength", + "maxLength", + "minimum", + "maximum", + "exclusiveMinimum", + "exclusiveMaximum", + "multipleOf", + "minItems", + "maxItems", + "uniqueItems", +]); + +const RECURSING_KEYWORDS = new Set([ + "properties", + "items", + "additionalProperties", + "propertyNames", + "oneOf", + "anyOf", + "allOf", +]); + +type JsonSchema = boolean | { [keyword: string]: unknown }; + +/** A named property that the walker reached, with the path a user would write. */ +interface DiscoveredField { + path: string; + description: string | undefined; +} + +/** + * Walk a JSON Schema and collect every named property under a `properties` map. + * + * Structural nodes (record wrappers, array `items`, union branches) are not + * themselves user-addressable and are exempt from the description contract, but + * the walker still descends through them so the named properties inside are + * checked. + * + * @throws if the schema uses a construct this walker does not explicitly support. + */ +function collectDescribedFields(root: JsonSchema): DiscoveredField[] { + const found: DiscoveredField[] = []; + + function visit(node: JsonSchema, path: string): void { + // `true`/`false` are valid JSON Schemas meaning "anything"/"nothing". + if (typeof node === "boolean") { + return; + } + + for (const keyword of Object.keys(node)) { + if (LEAF_KEYWORDS.has(keyword)) { + continue; + } + if (!RECURSING_KEYWORDS.has(keyword)) { + throw new Error( + `Unsupported JSON Schema construct \`${keyword}\` at ${path || ""}. ` + + `Teach collectDescribedFields how to traverse it before adding it to the schema.`, + ); + } + } + + const properties = node.properties; + if (properties !== undefined) { + for (const [name, child] of Object.entries(properties as Record)) { + const childPath = path ? `${path}.${name}` : name; + found.push({ + path: childPath, + description: + typeof child === "object" && typeof child.description === "string" + ? child.description + : undefined, + }); + visit(child, childPath); + } + } + + if (node.items !== undefined) { + visit(node.items as JsonSchema, `${path}[]`); + } + + if (node.additionalProperties !== undefined) { + visit(node.additionalProperties as JsonSchema, `${path}.{key}`); + } + + if (node.propertyNames !== undefined) { + visit(node.propertyNames as JsonSchema, `${path}.{keyName}`); + } + + for (const keyword of ["oneOf", "anyOf", "allOf"] as const) { + const branches = node[keyword]; + if (branches !== undefined) { + (branches as JsonSchema[]).forEach((branch, index) => { + visit(branch, `${path}<${keyword}[${index}]>`); + }); + } + } + } + + visit(root, ""); + return found; +} + +describe("collectDescribedFields", () => { + it("finds properties nested under `properties`", () => { + const schema = z.toJSONSchema( + z.object({ outer: z.object({ inner: z.string().describe("INNER") }) }), + ); + expect(collectDescribedFields(schema)).toContainEqual({ + path: "outer.inner", + description: "INNER", + }); + }); + + it("descends into array `items`", () => { + const schema = z.toJSONSchema( + z.object({ list: z.array(z.object({ field: z.string().describe("FIELD") })) }), + ); + expect(collectDescribedFields(schema)).toContainEqual({ + path: "list[].field", + description: "FIELD", + }); + }); + + it("descends into record values via `additionalProperties`", () => { + const schema = z.toJSONSchema( + z.object({ + map: z.record(z.string(), z.object({ field: z.string().describe("VALUE") })), + }), + ); + expect(collectDescribedFields(schema)).toContainEqual({ + path: "map.{key}.field", + description: "VALUE", + }); + }); + + it("descends into record keys via `propertyNames`", () => { + // A record's key schema is structural, so it yields no row and cannot be + // checked by inspecting the output. Nest an unsupported construct inside + // it instead: the walker can only reach it by traversing `propertyNames`, + // so this fails if that branch is ever dropped. + expect(() => + collectDescribedFields({ + type: "object", + propertyNames: { type: "string", patternProperties: {} }, + }), + ).toThrow(/Unsupported JSON Schema construct `patternProperties`/); + }); + + it("descends into every union branch", () => { + const schema = z.toJSONSchema( + z.object({ + choice: z.discriminatedUnion("t", [ + z.object({ t: z.literal("x"), only_x: z.string().describe("ONLY_X") }), + z.object({ t: z.literal("y"), only_y: z.string().describe("ONLY_Y") }), + ]), + }), + ); + const paths = collectDescribedFields(schema).map((f) => f.description); + expect(paths).toContain("ONLY_X"); + expect(paths).toContain("ONLY_Y"); + }); + + it("throws on a construct it does not explicitly support", () => { + expect(() => collectDescribedFields({ type: "object", patternProperties: {} })).toThrow( + /Unsupported JSON Schema construct `patternProperties`/, + ); + }); +}); + +describe("providers.json schema descriptions", () => { + it("describes every user-addressable field", () => { + const fields = collectDescribedFields(z.toJSONSchema(providersConfigSchema)); + + // Guards the guard: an empty walk would pass the assertion below vacuously. + expect(fields.length).toBeGreaterThan(0); + + const undescribed = fields.filter((f) => f.description === undefined).map((f) => f.path); + expect(undescribed).toEqual([]); + }); +}); diff --git a/packages/ai-config/src/schema.ts b/packages/ai-config/src/schema.ts index 681e2b3..77e5362 100644 --- a/packages/ai-config/src/schema.ts +++ b/packages/ai-config/src/schema.ts @@ -25,11 +25,21 @@ import type { BuiltinProviderId, SupportedCustomClientKind } from "./vocabulary. // Leaf enums // --------------------------------------------------------------------------- -export const protocolSchema = z.enum(PROTOCOL_VALUES); - -export const clientKindSchema = z.enum(CLIENT_KIND_VALUES); - -export const discoverySchema = z.enum(["auto", "off"]); +export const protocolSchema = z + .enum(PROTOCOL_VALUES) + .describe( + "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", + ); + +export const clientKindSchema = z + .enum(CLIENT_KIND_VALUES) + .describe("Which built-in provider client handles this entry."); + +export const discoverySchema = z + .enum(["auto", "off"]) + .describe( + "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", + ); // --------------------------------------------------------------------------- // Model overrides + custom models @@ -41,19 +51,58 @@ export const discoverySchema = z.enum(["auto", "off"]); */ export const modelOverrideSchema = z .object({ - name: z.string().optional(), - family: z.string().optional(), - maxContextLength: z.number().int().positive().optional(), - maxInputTokens: z.number().int().positive().optional(), - maxOutputTokens: z.number().int().positive().optional(), - protocol: protocolSchema.optional(), - baseUrl: z.string().optional(), - supportsTools: z.boolean().optional(), - supportsImages: z.boolean().optional(), - supportsToolResultImages: z.boolean().optional(), - supportedInputMediaTypes: z.array(z.string()).optional(), - supportsWebSearch: z.boolean().optional(), - thinkingEffortLevels: z.array(z.string()).optional(), + name: z.string().describe("Display name shown in the model picker.").optional(), + family: z + .string() + .describe( + "Model family, used for grouping models and for selecting family-specific system prompt content.", + ) + .optional(), + maxContextLength: z + .number() + .int() + .positive() + .describe("Total context window, in tokens.") + .optional(), + maxInputTokens: z + .number() + .int() + .positive() + .describe("Largest number of input tokens accepted in one request.") + .optional(), + maxOutputTokens: z + .number() + .int() + .positive() + .describe("Largest number of tokens the model may generate in one response.") + .optional(), + protocol: protocolSchema + .describe("API wire protocol for this model, overriding the provider's protocol.") + .optional(), + baseUrl: z + .string() + .describe("Base URL for this model only, overriding the provider's base URL.") + .optional(), + supportsTools: z.boolean().describe("Whether the model can call tools.").optional(), + supportsImages: z.boolean().describe("Whether the model accepts images as input.").optional(), + supportsToolResultImages: z + .boolean() + .describe("Whether the model accepts images returned by a tool result.") + .optional(), + supportedInputMediaTypes: z + .array(z.string()) + .describe("Media types the model accepts as input, such as `image/png`.") + .optional(), + supportsWebSearch: z + .boolean() + .describe("Whether the model supports the provider's own web search.") + .optional(), + thinkingEffortLevels: z + .array(z.string()) + .describe( + "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", + ) + .optional(), }) .strict(); @@ -64,21 +113,53 @@ export const modelOverrideSchema = z */ export const customModelSchema = z .object({ - id: z.string().min(1), - name: z.string().min(1), - maxContextLength: z.number().int().positive(), - supportsTools: z.boolean(), - supportsImages: z.boolean(), - supportsToolResultImages: z.boolean(), - supportsWebSearch: z.boolean(), + id: z.string().min(1).describe("Model id sent to the provider's API."), + name: z.string().min(1).describe("Display name shown in the model picker."), + maxContextLength: z.number().int().positive().describe("Total context window, in tokens."), + supportsTools: z.boolean().describe("Whether the model can call tools."), + supportsImages: z.boolean().describe("Whether the model accepts images as input."), + supportsToolResultImages: z + .boolean() + .describe("Whether the model accepts images returned by a tool result."), + supportsWebSearch: z + .boolean() + .describe("Whether the model supports the provider's own web search."), // Optional metadata - family: z.string().optional(), - maxInputTokens: z.number().int().positive().optional(), - maxOutputTokens: z.number().int().positive().optional(), - protocol: protocolSchema.optional(), - baseUrl: z.string().optional(), - supportedInputMediaTypes: z.array(z.string()).optional(), - thinkingEffortLevels: z.array(z.string()).optional(), + family: z + .string() + .describe( + "Model family, used for grouping models and for selecting family-specific system prompt content.", + ) + .optional(), + maxInputTokens: z + .number() + .int() + .positive() + .describe("Largest number of input tokens accepted in one request.") + .optional(), + maxOutputTokens: z + .number() + .int() + .positive() + .describe("Largest number of tokens the model may generate in one response.") + .optional(), + protocol: protocolSchema + .describe("API wire protocol for this model, overriding the provider's protocol.") + .optional(), + baseUrl: z + .string() + .describe("Base URL for this model only, overriding the provider's base URL.") + .optional(), + supportedInputMediaTypes: z + .array(z.string()) + .describe("Media types the model accepts as input, such as `image/png`.") + .optional(), + thinkingEffortLevels: z + .array(z.string()) + .describe( + "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", + ) + .optional(), }) .strict(); @@ -93,10 +174,28 @@ export const customModelSchema = z export const modelsBlockSchema = z .object({ discovery: discoverySchema.optional(), - allow: z.array(z.string()).optional(), - deny: z.array(z.string()).optional(), - overrides: z.record(z.string(), modelOverrideSchema).optional(), - custom: z.array(customModelSchema).optional(), + allow: z + .array(z.string()) + .describe( + "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", + ) + .optional(), + deny: z + .array(z.string()) + .describe("Model ids to hide. Applied after `allow`, so a model listed in both is hidden.") + .optional(), + overrides: z + .record(z.string().describe("Model id to patch."), modelOverrideSchema) + .describe( + "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", + ) + .optional(), + custom: z + .array(customModelSchema) + .describe( + "Models to declare yourself, for models the provider does not return from discovery.", + ) + .optional(), }) .strict(); @@ -114,26 +213,43 @@ export const modelsBlockSchema = z */ export const positaiLoginConfigSchema = z .object({ - host: z.string().optional(), - clientId: z.string().optional(), - scope: z.string().optional(), + host: z + .string() + .describe( + "Posit host to sign in against. The device-authorization and token URLs are derived from it.", + ) + .optional(), + clientId: z + .string() + .describe("OAuth client id used for the device-authorization sign-in flow.") + .optional(), + scope: z.string().describe("Space-separated OAuth scopes requested at sign-in.").optional(), }) - .strict(); + .strict() + .describe("Posit sign-in settings for the built-in positai provider."); /** AWS connection config — secret fields (accessKeyId/secretAccessKey/sessionToken) excluded. */ export const awsConfigSchema = z .object({ - region: z.string().optional(), - profile: z.string().optional(), + region: z.string().describe("AWS region to call, such as `us-east-1`.").optional(), + profile: z + .string() + .describe("Named profile from your AWS config and credentials files.") + .optional(), }) - .strict(); + .strict() + .describe("AWS connection settings for Bedrock. Credentials are not stored here."); export const googleCloudConfigSchema = z .object({ - project: z.string().optional(), - location: z.string().optional(), + project: z.string().describe("Google Cloud project id for Vertex AI.").optional(), + location: z + .string() + .describe("Google Cloud region for Vertex AI, such as `us-central1`.") + .optional(), }) - .strict(); + .strict() + .describe("Google Cloud connection settings for Vertex AI."); /** * Microsoft Entra ID auth mode for the built-in `ms-foundry` provider. @@ -157,24 +273,40 @@ export const azureConfigSchema = z export const snowflakeConfigSchema = z .object({ - account: z.string().optional(), - host: z.string().optional(), + account: z.string().describe("Snowflake account identifier.").optional(), + host: z + .string() + .describe( + "Snowflake host name. Set this when the account identifier alone does not resolve to the right host.", + ) + .optional(), /** * Directory containing `connections.toml` (the `SNOWFLAKE_HOME` override). * Points Snowflake credential discovery at a non-default location — e.g. * Workbench Managed Credentials, which place `connections.toml` in a * managed directory. Non-secret. */ - home: z.string().optional(), + home: z + .string() + .describe( + "Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.", + ) + .optional(), /** * Name of the `connections.toml` connection to use (non-secret). Selects * one entry from the file `home` points at. Consumed by * `@assistant/node`'s Snowflake resolver on Node platforms; ignored in * Positron, which defers Snowflake credentials to `vscode.authentication`. */ - connectionName: z.string().optional(), + connectionName: z + .string() + .describe( + "Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.", + ) + .optional(), }) - .strict(); + .strict() + .describe("Snowflake connection settings. Credentials are not stored here."); /** * Databricks workspace host (NOT a chat base URL — the bridge derives the @@ -183,12 +315,21 @@ export const snowflakeConfigSchema = z */ export const databricksConfigSchema = z .object({ - host: z.string().optional(), + host: z + .string() + .describe( + "Databricks workspace host. This is not a chat base URL: the serving-endpoint URL is derived from it.", + ) + .optional(), }) - .strict(); + .strict() + .describe("Databricks workspace settings."); /** Per-protocol base-URL overrides (partial — only specified protocols). */ -export const endpointsSchema = z.record(protocolSchema, z.string().optional()); +export const endpointsSchema = z.record( + protocolSchema, + z.string().describe("Base URL to use for this protocol.").optional(), +); // --------------------------------------------------------------------------- // Connection field composition @@ -201,13 +342,41 @@ export const endpointsSchema = z.record(protocolSchema, z.string().optional()); * per-provider via {@link connectionBlockSchema}. */ const baseConnectionFields = { - enabled: z.boolean().optional(), - baseUrl: z.string().optional(), - endpoint: z.string().optional(), - customHeaders: z.record(z.string(), z.string()).optional(), - protocol: protocolSchema.optional(), - endpoints: endpointsSchema.optional(), - models: modelsBlockSchema.optional(), + enabled: z + .boolean() + .describe("Whether this provider is available. Set to false to hide it from the model picker.") + .optional(), + baseUrl: z + .string() + .describe( + "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", + ) + .optional(), + endpoint: z + .string() + .describe( + "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", + ) + .optional(), + customHeaders: z + .record(z.string().describe("Header name."), z.string().describe("Header value.")) + .describe( + "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + ) + .optional(), + protocol: protocolSchema + .describe( + "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", + ) + .optional(), + endpoints: endpointsSchema + .describe( + "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", + ) + .optional(), + models: modelsBlockSchema + .describe("Which models this provider offers, and how their metadata is filled in.") + .optional(), }; /** @@ -339,7 +508,10 @@ export const builtinProviderBlockSchema = z.object(allConnectionFields).strict() /** The `providers.default` baseline block — carries `enabled` only for v1. */ export const defaultBlockSchema = z .object({ - enabled: z.boolean().optional(), + enabled: z + .boolean() + .describe("Default enablement for providers that do not set `enabled` themselves.") + .optional(), }) .strict(); @@ -352,7 +524,7 @@ export const defaultBlockSchema = z function customProviderVariantSchema(kind: K) { return z .object({ - type: z.literal(kind), + type: z.literal(kind).describe("Which provider client handles this entry."), ...baseConnectionFields, ...connectionSectionShape(CUSTOM_CONNECTION_SECTIONS[kind]), }) @@ -443,7 +615,12 @@ export const customProviderEntryFragmentSchema = z * so adding a built-in id cannot make those paths disagree. */ export const builtinProviderBlockSchemas = Object.fromEntries( - BUILTIN_PROVIDER_IDS.map((id) => [id, connectionBlockSchema(BUILTIN_CONNECTION_SECTIONS[id])]), + BUILTIN_PROVIDER_IDS.map((id) => [ + id, + connectionBlockSchema(BUILTIN_CONNECTION_SECTIONS[id]).describe( + `Configuration for the built-in ${id} provider.`, + ), + ]), ) as Record; function optionalBuiltinBlock( @@ -471,9 +648,20 @@ function validateCustomProviderNames(value: unknown, ctx: z.RefinementCtx): unkn export const providersMapSchema = z .object({ ...builtinProviderKeys, - default: defaultBlockSchema.optional(), + default: defaultBlockSchema + .describe("Baseline applied to every provider that does not set the same key itself.") + .optional(), custom: z - .preprocess(validateCustomProviderNames, z.record(z.string(), customProviderEntrySchema)) + .preprocess( + validateCustomProviderNames, + z.record( + z.string().describe("Name of your choosing, also used as the display name."), + customProviderEntrySchema, + ), + ) + .describe( + "Providers you declare yourself, keyed by a name of your choosing. Available on Node-backed surfaces (Standalone, Desktop, RStudio, and the Terminal); Positron does not expose custom providers.", + ) .optional(), }) .strict(); @@ -509,9 +697,18 @@ export const providersConfigSchema = z.preprocess( validateUnsafeObjectKeys, z .object({ - $schema: z.string().optional(), - version: z.literal(1).optional(), - providers: providersMapSchema.optional(), + $schema: z + .string() + .describe( + "Path or URL of the JSON Schema for this file. Editors use it for validation and autocomplete.", + ) + .optional(), + version: z.literal(1).describe("Version of this config format. Always 1.").optional(), + providers: providersMapSchema + .describe( + "Provider configuration, keyed by built-in provider id, plus the reserved `default` and `custom` keys.", + ) + .optional(), }) .strict(), ); From 694929f57856e37c2bb88256aa794d630b99c2f9 Mon Sep 17 00:00:00 2001 From: sharon wang <25834218+sharon-wang@users.noreply.github.com> Date: Tue, 25 Aug 2026 11:12:49 -0400 Subject: [PATCH 2/4] Write providers.schema.json from inlined bytes, on every mutation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two bugs kept the schema from reaching users, so editors never showed validation or hover descriptions for providers.json. First, the schema was resolved at runtime with `require.resolve("ai-config/providers.schema.json")`. Consumers bundle ai-config (esbuild inlines it) and ship no `node_modules/ai-config` — the Positron extension's .vscodeignore excludes node_modules entirely, and standalone is a single bundled main.js. So that resolve throws in every packaged build, lands in the catch, logs a warning, and writes nothing. Only dev checkouts ever got a schema. Second, the copy ran only inside the race-safe file-creation branch, so even where it worked it wrote once and never again. An install whose providers.json predates a schema change stayed pinned to whatever shipped that day. generate-schema now emits the same bytes as a string constant that `mutateProvidersConfig` writes directly. Inlining is the only form that survives bundling. It is stored minified and pretty-printed on write, which halves what every consumer bundles (440KB to 224KB, measured +1.5% on the standalone server bundle) and reproduces the .json file byte for byte. The write runs after the mutation rather than before, so it cannot perturb the mutation's own read/write sequence, and is skipped when the mutation fails. It compares content first, so the common path does no disk write. Note this still only refreshes on a mutation, which fires on migrations, Snowflake auth, and settings writes — not at every startup. A user who upgrades and never changes a setting still will not see a refresh; closing that needs an explicit call from the hosts. --- .github/workflows/ci.yml | 18 +++--- .oxfmtrc.json | 3 +- packages/ai-config/scripts/generate-schema.ts | 63 +++++++++++++++++-- .../src/__tests__/mutate-config.test.ts | 63 ++++++++++++++----- .../src/generated/providers-schema-source.ts | 26 ++++++++ packages/ai-config/src/node/mutate-config.ts | 55 ++++++++++------ 6 files changed, 180 insertions(+), 48 deletions(-) create mode 100644 packages/ai-config/src/generated/providers-schema-source.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5173c31..521d713 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,15 +28,19 @@ jobs: - name: Build dependencies run: npm run build -w ai-config -w ai-credentials - # providers.schema.json is source-controlled and consumed directly by - # editors and the Assistant docs generator, so a stale commit is a real - # bug. Diff against HEAD rather than the working tree: `build` above - # already regenerated the file via ai-config's prebuild, so a - # working-tree comparison would always pass. - - name: Check providers.schema.json is up to date + # generate-schema emits two source-controlled artifacts from one source: + # providers.schema.json (the package export, read by editors and the + # Assistant docs generator) and src/generated/providers-schema-source.ts + # (the same bytes inlined, written next to the user's providers.json). + # A stale commit of either is a real bug. Diff against HEAD rather than + # the working tree: `build` above already regenerated both via + # ai-config's prebuild, so a working-tree comparison would always pass. + - name: Check generated schema artifacts are up to date run: | npm run generate-schema -w ai-config - git diff --exit-code HEAD -- packages/ai-config/providers.schema.json + git diff --exit-code HEAD -- \ + packages/ai-config/providers.schema.json \ + packages/ai-config/src/generated/providers-schema-source.ts - name: Type check run: npm run check-types -w ai-provider-bridge diff --git a/.oxfmtrc.json b/.oxfmtrc.json index c38e56c..f537a6a 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -17,7 +17,8 @@ "**/dist/", "**/*.tsbuildinfo", "**/*.html", - "packages/ai-config/providers.schema.json" + "packages/ai-config/providers.schema.json", + "packages/ai-config/src/generated/" ], "overrides": [ { diff --git a/packages/ai-config/scripts/generate-schema.ts b/packages/ai-config/scripts/generate-schema.ts index 960b514..6983daf 100644 --- a/packages/ai-config/scripts/generate-schema.ts +++ b/packages/ai-config/scripts/generate-schema.ts @@ -7,9 +7,19 @@ /** * Generate providers.schema.json from the Zod schema. * - * Produces a JSON Schema file at the package root (source-controlled) that - * is also copied into ~/.posit/ai/ alongside providers.json at seed time - * so editors can validate and autocomplete the config file. + * Produces two source-controlled artifacts, both derived from the same bytes: + * + * 1. `providers.schema.json` at the package root — the package export, read by + * the Assistant docs generator and by anyone pointing an editor at it. + * 2. `src/generated/providers-schema-source.ts` — the same content as a string + * constant, so `mutateProvidersConfig` can write the schema next to + * ~/.posit/ai/providers.json without resolving a file at runtime. + * + * The constant exists because consumers bundle ai-config (esbuild inlines it), + * and no consumer ships a `node_modules/ai-config` directory. A runtime + * `require.resolve("ai-config/providers.schema.json")` therefore throws in every + * packaged build, which silently left users with no schema at all. Inlining the + * bytes is the only form that survives bundling. * * Usage: npx tsx scripts/generate-schema.ts */ @@ -189,6 +199,10 @@ function removeRecordRequiredFields(schema: JSONSchema): JSONSchema { // Generation // --------------------------------------------------------------------------- +const COPYRIGHT_HEADER = `/*--------------------------------------------------------------------------------------------- + * Copyright (C) 2026 Posit Software, PBC. All rights reserved. + *--------------------------------------------------------------------------------------------*/`; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -216,10 +230,51 @@ async function generateSchema() { try { const outputPath = path.resolve(__dirname, "../providers.schema.json"); + const contents = serializeProvidersSchema(); - await fs.writeFile(outputPath, serializeProvidersSchema(), "utf-8"); + await fs.writeFile(outputPath, contents, "utf-8"); console.log(`✅ providers.schema.json generated: ${outputPath}`); + + // Stored minified to halve what every consumer bundles (440KB -> 224KB). + // `JSON.stringify(JSON.parse(minified), null, 2) + "\n"` reproduces + // `contents` byte for byte, so the written file is identical either way. + // JSON.stringify of the string yields a fully-escaped JS literal; a + // template literal would not be safe, since descriptions contain backticks. + const minified = JSON.stringify(JSON.parse(contents)); + const sourcePath = path.resolve(__dirname, "../src/generated/providers-schema-source.ts"); + const module = [ + COPYRIGHT_HEADER, + "", + "/**", + " * DO NOT EDIT. Generated by scripts/generate-schema.ts.", + " *", + " * providers.schema.json, minified and inlined so the schema can be written", + " * next to providers.json without resolving a file at runtime (which fails in", + " * bundled consumers \u2014 see the generator's header for why).", + " */", + `const MINIFIED = ${JSON.stringify(minified)};`, + "", + "let cached: string | undefined;", + "", + "/**", + " * The exact bytes to write as providers.schema.json.", + " *", + " * Memoized: the callers check this against a file on every config mutation,", + " * and re-expanding a 224KB constant into 440KB each time is pure waste. The", + " * value is fixed at build time, so caching it is unconditionally safe.", + " */", + "export function providersSchemaFileContents(): string {", + '\tcached ??= JSON.stringify(JSON.parse(MINIFIED), null, 2) + "\\n";', + "\treturn cached;", + "}", + "", + ].join("\n"); + + await fs.mkdir(path.dirname(sourcePath), { recursive: true }); + await fs.writeFile(sourcePath, module, "utf-8"); + + console.log(`✅ providers-schema-source.ts generated: ${sourcePath}`); } catch (error) { console.error("❌ Failed to generate providers.schema.json:", error); process.exit(1); diff --git a/packages/ai-config/src/__tests__/mutate-config.test.ts b/packages/ai-config/src/__tests__/mutate-config.test.ts index ae16e2e..d767963 100644 --- a/packages/ai-config/src/__tests__/mutate-config.test.ts +++ b/packages/ai-config/src/__tests__/mutate-config.test.ts @@ -9,6 +9,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { createConfigFileFixture } from "../../tests/helpers/config-file-fixture.js"; import type { ConfigFileFixture } from "../../tests/helpers/config-file-fixture.js"; +import { providersSchemaFileContents } from "../generated/providers-schema-source.js"; import { PROVIDERS_CONFIG_VERSION } from "../index.js"; import { mutateProvidersConfig } from "../node/mutate-config.js"; import { parseJsonc } from "../node/parse-jsonc.js"; @@ -379,25 +380,53 @@ describe("mutateProvidersConfig first creation and seed boundaries", () => { expect(content.providers?.anthropic?.enabled).toBe(true); }); - it("copies providers.schema.json alongside the config file on creation", async () => { - await mutateProvidersConfig((current) => current, { configPath, logger: mockLogger }); + it("writes the schema next to the config", async () => { + await mutateProvidersConfig((current) => ({ ...current, version: 1 }), { + configPath, + logger: mockLogger, + }); + + const written = await fs.readFile(path.join(fixture.directory, "providers.schema.json"), "utf-8"); + expect(written).toBe(providersSchemaFileContents()); + expect(JSON.parse(written).properties).toHaveProperty("providers"); + }); + it("refreshes a stale schema on a later mutation", async () => { + await fixture.writeTypedConfig({ + providers: { anthropic: { enabled: true } }, + }); const schemaPath = path.join(fixture.directory, "providers.schema.json"); - const exists = await fs - .access(schemaPath) - .then(() => true) - .catch(() => false); - - // The schema file should be copied (best-effort — may not exist in all - // environments, but should work when running from the package source) - if (exists) { - const schemaContent = JSON.parse(await fs.readFile(schemaPath, "utf-8")); - expect(schemaContent).toHaveProperty("$schema"); - expect(schemaContent).toHaveProperty("properties"); - } - // Either way, the config file should exist and be valid - const configContent = JSON.parse(await fixture.readRaw()); - expect(configContent).toBeDefined(); + await fs.writeFile(schemaPath, '{"stale":true}\n'); + + await mutateProvidersConfig( + (current) => ({ + ...current, + providers: { ...current.providers, anthropic: { enabled: false } }, + }), + { configPath, logger: mockLogger }, + ); + + expect(await fs.readFile(schemaPath, "utf-8")).toBe(providersSchemaFileContents()); + }); + + it("leaves a current schema untouched", async () => { + await fixture.writeTypedConfig({ + providers: { anthropic: { enabled: true } }, + }); + const schemaPath = path.join(fixture.directory, "providers.schema.json"); + await fs.writeFile(schemaPath, providersSchemaFileContents()); + const rename = vi.spyOn(fs, "rename"); + + await mutateProvidersConfig( + (current) => ({ + ...current, + providers: { ...current.providers, anthropic: { enabled: false } }, + }), + { configPath, logger: mockLogger }, + ); + + expect(rename.mock.calls.filter(([, dest]) => dest === schemaPath)).toEqual([]); + rename.mockRestore(); }); it("does NOT re-inject $schema/version when a user removes them", async () => { diff --git a/packages/ai-config/src/generated/providers-schema-source.ts b/packages/ai-config/src/generated/providers-schema-source.ts new file mode 100644 index 0000000..7d8be32 --- /dev/null +++ b/packages/ai-config/src/generated/providers-schema-source.ts @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (C) 2026 Posit Software, PBC. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +/** + * DO NOT EDIT. Generated by scripts/generate-schema.ts. + * + * providers.schema.json, minified and inlined so the schema can be written + * next to providers.json without resolving a file at runtime (which fails in + * bundled consumers — see the generator's header for why). + */ +const MINIFIED = "{\"$id\":\"https://posit.co/schemas/providers.schema.json\",\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"additionalProperties\":false,\"description\":\"Configuration file for AI provider connections, enablement, and model overrides. See https://github.com/posit-dev/assistant for documentation.\",\"properties\":{\"$schema\":{\"description\":\"Path or URL of the JSON Schema for this file. Editors use it for validation and autocomplete.\",\"type\":\"string\"},\"providers\":{\"additionalProperties\":false,\"description\":\"Provider configuration, keyed by built-in provider id, plus the reserved `default` and `custom` keys.\",\"properties\":{\"anthropic\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in anthropic provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"bedrock\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in bedrock provider.\",\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"copilot\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in copilot provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"custom\":{\"additionalProperties\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai-compatible\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"anthropic\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"gemini\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"aws\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":{\"const\":\"snowflake\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"google-vertex\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ollama\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"lmstudio\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"deepseek\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openrouter\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ms-foundry\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"litellm\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"portkey\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"}]},\"description\":\"Providers you declare yourself, keyed by a name of your choosing. Available on Node-backed surfaces (Standalone, Desktop, RStudio, and the Terminal); Positron does not expose custom providers.\",\"propertyNames\":{\"description\":\"Name of your choosing, also used as the display name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in databricks provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Databricks workspace settings.\",\"properties\":{\"host\":{\"description\":\"Databricks workspace host. This is not a chat base URL: the serving-endpoint URL is derived from it.\",\"type\":\"string\"}},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"deepseek\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in deepseek provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"default\":{\"additionalProperties\":false,\"description\":\"Baseline applied to every provider that does not set the same key itself.\",\"properties\":{\"enabled\":{\"description\":\"Default enablement for providers that do not set `enabled` themselves.\",\"type\":\"boolean\"}},\"type\":\"object\"},\"gemini\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in gemini provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"google-vertex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in google-vertex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"litellm\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in litellm provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"lmstudio\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in lmstudio provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ms-foundry\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ms-foundry provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ollama\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ollama provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai-compatible\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai-compatible provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openrouter\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openrouter provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"portkey\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in portkey provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"positai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in positai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"positaiLogin\":{\"additionalProperties\":false,\"description\":\"Posit sign-in settings for the built-in positai provider.\",\"properties\":{\"clientId\":{\"description\":\"OAuth client id used for the device-authorization sign-in flow.\",\"type\":\"string\"},\"host\":{\"description\":\"Posit host to sign in against. The device-authorization and token URLs are derived from it.\",\"type\":\"string\"},\"scope\":{\"description\":\"Space-separated OAuth scopes requested at sign-in.\",\"type\":\"string\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"snowflake-cortex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in snowflake-cortex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"type\":\"object\"},\"version\":{\"const\":1,\"description\":\"Version of this config format. Always 1.\",\"type\":\"number\"}},\"title\":\"Posit AI Provider Configuration\",\"type\":\"object\"}"; + +let cached: string | undefined; + +/** + * The exact bytes to write as providers.schema.json. + * + * Memoized: the callers check this against a file on every config mutation, + * and re-expanding a 224KB constant into 440KB each time is pure waste. The + * value is fixed at build time, so caching it is unconditionally safe. + */ +export function providersSchemaFileContents(): string { + cached ??= JSON.stringify(JSON.parse(MINIFIED), null, 2) + "\n"; + return cached; +} diff --git a/packages/ai-config/src/node/mutate-config.ts b/packages/ai-config/src/node/mutate-config.ts index 7391356..dd271ce 100644 --- a/packages/ai-config/src/node/mutate-config.ts +++ b/packages/ai-config/src/node/mutate-config.ts @@ -14,13 +14,13 @@ */ import { promises as fs } from "fs"; -import { createRequire } from "module"; import * as path from "path"; import { isDeepStrictEqual } from "util"; import lockfile from "proper-lockfile"; import { editJsonc, normalizeJsonValue } from "../edit-jsonc.js"; +import { providersSchemaFileContents } from "../generated/providers-schema-source.js"; import { PROVIDERS_CONFIG_VERSION } from "../index.js"; import { providersConfigSchema } from "../schema.js"; import type { ProvidersConfig } from "../types.js"; @@ -78,6 +78,11 @@ export async function mutateProvidersConfig( await enqueue(configPath, async () => { await performLockedMutation(configPath, mutator, logger); + + // After the mutation, so it cannot perturb the read/write sequence above, + // and skipped entirely if the mutation failed (a broken config is not the + // moment to refresh an editor hint). Best-effort and idempotent. + await writeSchemaFile(configPath, logger); }); } @@ -209,9 +214,9 @@ async function atomicWrite(configPath: string, text: string): Promise { * where two concurrent callers both observe ENOENT and then one clobbers the * other's completed write with an empty `{}`. * - * On file creation, seeds the file with `$schema` and `version` fields, and - * best-effort copies `providers.schema.json` alongside the config file for - * editor validation/autocomplete. + * On file creation, seeds the file with `$schema` and `version` fields. The + * sibling `providers.schema.json` is written by the caller on every mutation, + * not just on creation. * * @returns `true` if this call created the file (first write), `false` if * it already existed. The caller uses this to inject seed metadata into @@ -240,31 +245,43 @@ async function raceSafeEnsureFile( await fd.close(); } - // Best-effort: copy providers.schema.json alongside the config file. - // This enables editor validation/autocomplete. If it fails (missing - // file, permissions), log but don't fail — the schema hint is a - // nice-to-have, not a correctness requirement. - await copySchemaFile(configPath, logger); return true; } return false; } /** - * Best-effort copy of providers.schema.json from the ai-config package into - * the same directory as the config file. Uses the package export to resolve - * the source path. + * Best-effort write of providers.schema.json next to the config file, so + * editors can validate `providers.json` and show field descriptions on hover. + * + * The bytes are inlined at build time rather than resolved from the package. + * Consumers bundle ai-config and ship no `node_modules/ai-config`, so a runtime + * `require.resolve("ai-config/providers.schema.json")` throws in every packaged + * build — which silently left users with no schema at all. + * + * Runs on every mutation, not just on file creation, so an upgraded schema + * reaches existing installs instead of leaving them pinned to whatever shipped + * the day their config was first written. The content check keeps the common + * case free of a disk write. + * + * Deliberately outside the config lock, unlike everything else in this module: + * concurrent writers all write identical build-time bytes through an atomic + * temp+rename, so there is nothing for the lock to protect. */ -async function copySchemaFile(configPath: string, logger: LoggerLike | undefined): Promise { +async function writeSchemaFile(configPath: string, logger: LoggerLike | undefined): Promise { try { - // Resolve the schema file from the package export - const require = createRequire(import.meta.url); - const schemaSource = require.resolve("ai-config/providers.schema.json"); const schemaTarget = path.join(path.dirname(configPath), "providers.schema.json"); - await fs.copyFile(schemaSource, schemaTarget); - logger?.debug("[ai-config] Copied providers.schema.json to config directory"); + const contents = providersSchemaFileContents(); + + const existing = await fs.readFile(schemaTarget, "utf-8").catch(() => undefined); + if (existing === contents) { + return; + } + + await atomicWrite(schemaTarget, contents); + logger?.debug("[ai-config] Wrote providers.schema.json to config directory"); } catch (error) { - logger?.warn(`[ai-config] Could not copy providers.schema.json: ${errorMessage(error)}`); + logger?.warn(`[ai-config] Could not write providers.schema.json: ${errorMessage(error)}`); } } From 099be97c46a12caadc467771845699fa52252f05 Mon Sep 17 00:00:00 2001 From: sharon wang <25834218+sharon-wang@users.noreply.github.com> Date: Wed, 26 Aug 2026 10:44:06 -0400 Subject: [PATCH 3/4] Clean up user-facing field descriptions in providers.json schema Drop "Node-backed surfaces" jargon from providers.custom and snowflake.connectionName, and say "Maximum" instead of "Largest" for maxInputTokens/maxOutputTokens, matching common usage. --- packages/ai-config/providers.schema.json | 303 ++++++++++-------- .../src/__tests__/mutate-config.test.ts | 9 +- .../src/generated/providers-schema-source.ts | 2 +- packages/ai-config/src/schema.ts | 35 +- 4 files changed, 207 insertions(+), 142 deletions(-) diff --git a/packages/ai-config/providers.schema.json b/packages/ai-config/providers.schema.json index 913b033..8f8e2d3 100644 --- a/packages/ai-config/providers.schema.json +++ b/packages/ai-config/providers.schema.json @@ -96,13 +96,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -202,13 +202,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -386,13 +386,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -492,13 +492,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -579,30 +579,40 @@ }, "connect": { "additionalProperties": false, + "description": "Configuration for the built-in connect provider.", "properties": { "baseUrl": { + "description": "Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.", "type": "string" }, "customHeaders": { "additionalProperties": { + "description": "Header value.", "type": "string" }, + "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { + "description": "Header name.", "type": "string" }, "type": "object" }, "enabled": { + "description": "Whether this provider is available. Set to false to hide it from the model picker.", "type": "boolean" }, "endpoint": { + "description": "Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.", "type": "string" }, "endpoints": { "additionalProperties": { + "description": "Base URL to use for this protocol.", "type": "string" }, + "description": "Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.", "propertyNames": { + "description": "API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -617,47 +627,58 @@ }, "models": { "additionalProperties": false, + "description": "Which models this provider offers, and how their metadata is filled in.", "properties": { "allow": { + "description": "Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.", "items": { "type": "string" }, "type": "array" }, "custom": { + "description": "Models to declare yourself, for models the provider does not return from discovery.", "items": { "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "id": { + "description": "Model id sent to the provider's API.", "minLength": 1, "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "minLength": 1, "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -669,24 +690,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -707,12 +734,14 @@ "type": "array" }, "deny": { + "description": "Model ids to hide. Applied after `allow`, so a model listed in both is hidden.", "items": { "type": "string" }, "type": "array" }, "discovery": { + "description": "Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.", "enum": [ "auto", "off" @@ -724,30 +753,37 @@ "additionalProperties": false, "properties": { "baseUrl": { + "description": "Base URL for this model only, overriding the provider's base URL.", "type": "string" }, "family": { + "description": "Model family, used for grouping models and for selecting family-specific system prompt content.", "type": "string" }, "maxContextLength": { + "description": "Total context window, in tokens.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxInputTokens": { + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "name": { + "description": "Display name shown in the model picker.", "type": "string" }, "protocol": { + "description": "API wire protocol for this model, overriding the provider's protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -759,24 +795,30 @@ "type": "string" }, "supportedInputMediaTypes": { + "description": "Media types the model accepts as input, such as `image/png`.", "items": { "type": "string" }, "type": "array" }, "supportsImages": { + "description": "Whether the model accepts images as input.", "type": "boolean" }, "supportsToolResultImages": { + "description": "Whether the model accepts images returned by a tool result.", "type": "boolean" }, "supportsTools": { + "description": "Whether the model can call tools.", "type": "boolean" }, "supportsWebSearch": { + "description": "Whether the model supports the provider's own web search.", "type": "boolean" }, "thinkingEffortLevels": { + "description": "Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.", "items": { "type": "string" }, @@ -785,7 +827,9 @@ }, "type": "object" }, + "description": "Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.", "propertyNames": { + "description": "Model id to patch.", "type": "string" }, "type": "object" @@ -794,6 +838,7 @@ "type": "object" }, "protocol": { + "description": "API wire protocol for this provider. Set this only when the provider does not use its default protocol.", "enum": [ "anthropic-messages", "openai-chat", @@ -891,13 +936,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -997,13 +1042,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -1176,13 +1221,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -1282,13 +1327,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -1466,13 +1511,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -1572,13 +1617,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -1756,13 +1801,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -1862,13 +1907,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -2046,13 +2091,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -2152,13 +2197,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -2351,13 +2396,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -2457,13 +2502,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -2641,13 +2686,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -2747,13 +2792,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -2838,7 +2883,7 @@ "type": "string" }, "connectionName": { - "description": "Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.", + "description": "Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.", "type": "string" }, "home": { @@ -2969,13 +3014,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -3075,13 +3120,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -3259,13 +3304,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -3365,13 +3410,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -3549,13 +3594,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -3655,13 +3700,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -3839,13 +3884,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -3945,13 +3990,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -4129,13 +4174,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -4235,13 +4280,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -4419,13 +4464,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -4525,13 +4570,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -4709,13 +4754,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -4815,13 +4860,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -4999,13 +5044,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -5105,13 +5150,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -5200,7 +5245,7 @@ } ] }, - "description": "Providers you declare yourself, keyed by a name of your choosing. Available on Node-backed surfaces (Standalone, Desktop, RStudio, and the Terminal); Positron does not expose custom providers.", + "description": "Providers you declare yourself, keyed by a name of your choosing.", "propertyNames": { "description": "Name of your choosing, also used as the display name.", "type": "string" @@ -5302,13 +5347,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -5408,13 +5453,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -5577,13 +5622,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -5683,13 +5728,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -5863,13 +5908,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -5969,13 +6014,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -6153,13 +6198,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -6259,13 +6304,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -6428,13 +6473,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -6534,13 +6579,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -6703,13 +6748,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -6809,13 +6854,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -6900,8 +6945,10 @@ "properties": { "azure": { "additionalProperties": false, + "description": "Microsoft Entra ID connection settings for the built-in ms-foundry provider.", "properties": { "authMode": { + "description": "How to authenticate: `apikey` (default, back-compat) or `entra` for Microsoft Entra ID sign-in.", "enum": [ "apikey", "entra" @@ -6909,9 +6956,11 @@ "type": "string" }, "scope": { + "description": "OAuth scope requested when acquiring a Microsoft Entra ID token.", "type": "string" }, "tenantId": { + "description": "Microsoft Entra ID tenant to authenticate against. Uses the default tenant if unset.", "type": "string" } }, @@ -6997,13 +7046,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -7103,13 +7152,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -7272,13 +7321,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -7378,13 +7427,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -7547,13 +7596,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -7653,13 +7702,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -7822,13 +7871,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -7928,13 +7977,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -8097,13 +8146,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -8203,13 +8252,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -8372,13 +8421,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -8478,13 +8527,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -8647,13 +8696,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -8753,13 +8802,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -8941,13 +8990,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -9047,13 +9096,13 @@ "type": "integer" }, "maxInputTokens": { - "description": "Largest number of input tokens accepted in one request.", + "description": "Maximum number of input tokens accepted in one request.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxOutputTokens": { - "description": "Largest number of tokens the model may generate in one response.", + "description": "Maximum number of tokens the model may generate in one response.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" @@ -9138,7 +9187,7 @@ "type": "string" }, "connectionName": { - "description": "Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.", + "description": "Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.", "type": "string" }, "home": { diff --git a/packages/ai-config/src/__tests__/mutate-config.test.ts b/packages/ai-config/src/__tests__/mutate-config.test.ts index d767963..ad55afd 100644 --- a/packages/ai-config/src/__tests__/mutate-config.test.ts +++ b/packages/ai-config/src/__tests__/mutate-config.test.ts @@ -159,7 +159,9 @@ describe("mutateProvidersConfig", () => { await mutateProvidersConfig((current) => ({ ...current }), { configPath, logger: mockLogger }); - expect(rename).not.toHaveBeenCalled(); + // A mutation also refreshes the sibling providers.schema.json, so assert + // on the config file specifically rather than on rename as a whole. + expect(rename.mock.calls.filter(([, dest]) => dest === configPath)).toEqual([]); expect(await fixture.readRaw()).toBe(original); }); @@ -386,7 +388,10 @@ describe("mutateProvidersConfig first creation and seed boundaries", () => { logger: mockLogger, }); - const written = await fs.readFile(path.join(fixture.directory, "providers.schema.json"), "utf-8"); + const written = await fs.readFile( + path.join(fixture.directory, "providers.schema.json"), + "utf-8", + ); expect(written).toBe(providersSchemaFileContents()); expect(JSON.parse(written).properties).toHaveProperty("providers"); }); diff --git a/packages/ai-config/src/generated/providers-schema-source.ts b/packages/ai-config/src/generated/providers-schema-source.ts index 7d8be32..5287457 100644 --- a/packages/ai-config/src/generated/providers-schema-source.ts +++ b/packages/ai-config/src/generated/providers-schema-source.ts @@ -9,7 +9,7 @@ * next to providers.json without resolving a file at runtime (which fails in * bundled consumers — see the generator's header for why). */ -const MINIFIED = "{\"$id\":\"https://posit.co/schemas/providers.schema.json\",\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"additionalProperties\":false,\"description\":\"Configuration file for AI provider connections, enablement, and model overrides. See https://github.com/posit-dev/assistant for documentation.\",\"properties\":{\"$schema\":{\"description\":\"Path or URL of the JSON Schema for this file. Editors use it for validation and autocomplete.\",\"type\":\"string\"},\"providers\":{\"additionalProperties\":false,\"description\":\"Provider configuration, keyed by built-in provider id, plus the reserved `default` and `custom` keys.\",\"properties\":{\"anthropic\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in anthropic provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"bedrock\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in bedrock provider.\",\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"copilot\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in copilot provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"custom\":{\"additionalProperties\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai-compatible\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"anthropic\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"gemini\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"aws\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":{\"const\":\"snowflake\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"google-vertex\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ollama\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"lmstudio\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"deepseek\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openrouter\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ms-foundry\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"litellm\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"portkey\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"}]},\"description\":\"Providers you declare yourself, keyed by a name of your choosing. Available on Node-backed surfaces (Standalone, Desktop, RStudio, and the Terminal); Positron does not expose custom providers.\",\"propertyNames\":{\"description\":\"Name of your choosing, also used as the display name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in databricks provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Databricks workspace settings.\",\"properties\":{\"host\":{\"description\":\"Databricks workspace host. This is not a chat base URL: the serving-endpoint URL is derived from it.\",\"type\":\"string\"}},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"deepseek\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in deepseek provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"default\":{\"additionalProperties\":false,\"description\":\"Baseline applied to every provider that does not set the same key itself.\",\"properties\":{\"enabled\":{\"description\":\"Default enablement for providers that do not set `enabled` themselves.\",\"type\":\"boolean\"}},\"type\":\"object\"},\"gemini\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in gemini provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"google-vertex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in google-vertex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"litellm\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in litellm provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"lmstudio\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in lmstudio provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ms-foundry\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ms-foundry provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ollama\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ollama provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai-compatible\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai-compatible provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openrouter\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openrouter provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"portkey\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in portkey provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"positai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in positai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"positaiLogin\":{\"additionalProperties\":false,\"description\":\"Posit sign-in settings for the built-in positai provider.\",\"properties\":{\"clientId\":{\"description\":\"OAuth client id used for the device-authorization sign-in flow.\",\"type\":\"string\"},\"host\":{\"description\":\"Posit host to sign in against. The device-authorization and token URLs are derived from it.\",\"type\":\"string\"},\"scope\":{\"description\":\"Space-separated OAuth scopes requested at sign-in.\",\"type\":\"string\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"snowflake-cortex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in snowflake-cortex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Largest number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Largest number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"type\":\"object\"},\"version\":{\"const\":1,\"description\":\"Version of this config format. Always 1.\",\"type\":\"number\"}},\"title\":\"Posit AI Provider Configuration\",\"type\":\"object\"}"; +const MINIFIED = "{\"$id\":\"https://posit.co/schemas/providers.schema.json\",\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"additionalProperties\":false,\"description\":\"Configuration file for AI provider connections, enablement, and model overrides. See https://github.com/posit-dev/assistant for documentation.\",\"properties\":{\"$schema\":{\"description\":\"Path or URL of the JSON Schema for this file. Editors use it for validation and autocomplete.\",\"type\":\"string\"},\"providers\":{\"additionalProperties\":false,\"description\":\"Provider configuration, keyed by built-in provider id, plus the reserved `default` and `custom` keys.\",\"properties\":{\"anthropic\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in anthropic provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"bedrock\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in bedrock provider.\",\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"connect\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in connect provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"copilot\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in copilot provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"custom\":{\"additionalProperties\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai-compatible\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"anthropic\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"gemini\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"aws\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":{\"const\":\"snowflake\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"google-vertex\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ollama\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"lmstudio\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"deepseek\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openrouter\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ms-foundry\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"litellm\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"portkey\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"}]},\"description\":\"Providers you declare yourself, keyed by a name of your choosing.\",\"propertyNames\":{\"description\":\"Name of your choosing, also used as the display name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in databricks provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Databricks workspace settings.\",\"properties\":{\"host\":{\"description\":\"Databricks workspace host. This is not a chat base URL: the serving-endpoint URL is derived from it.\",\"type\":\"string\"}},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"deepseek\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in deepseek provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"default\":{\"additionalProperties\":false,\"description\":\"Baseline applied to every provider that does not set the same key itself.\",\"properties\":{\"enabled\":{\"description\":\"Default enablement for providers that do not set `enabled` themselves.\",\"type\":\"boolean\"}},\"type\":\"object\"},\"gemini\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in gemini provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"google-vertex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in google-vertex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"litellm\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in litellm provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"lmstudio\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in lmstudio provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ms-foundry\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ms-foundry provider.\",\"properties\":{\"azure\":{\"additionalProperties\":false,\"description\":\"Microsoft Entra ID connection settings for the built-in ms-foundry provider.\",\"properties\":{\"authMode\":{\"description\":\"How to authenticate: `apikey` (default, back-compat) or `entra` for Microsoft Entra ID sign-in.\",\"enum\":[\"apikey\",\"entra\"],\"type\":\"string\"},\"scope\":{\"description\":\"OAuth scope requested when acquiring a Microsoft Entra ID token.\",\"type\":\"string\"},\"tenantId\":{\"description\":\"Microsoft Entra ID tenant to authenticate against. Uses the default tenant if unset.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ollama\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ollama provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai-compatible\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai-compatible provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openrouter\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openrouter provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"portkey\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in portkey provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"positai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in positai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"positaiLogin\":{\"additionalProperties\":false,\"description\":\"Posit sign-in settings for the built-in positai provider.\",\"properties\":{\"clientId\":{\"description\":\"OAuth client id used for the device-authorization sign-in flow.\",\"type\":\"string\"},\"host\":{\"description\":\"Posit host to sign in against. The device-authorization and token URLs are derived from it.\",\"type\":\"string\"},\"scope\":{\"description\":\"Space-separated OAuth scopes requested at sign-in.\",\"type\":\"string\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"snowflake-cortex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in snowflake-cortex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"type\":\"object\"},\"version\":{\"const\":1,\"description\":\"Version of this config format. Always 1.\",\"type\":\"number\"}},\"title\":\"Posit AI Provider Configuration\",\"type\":\"object\"}"; let cached: string | undefined; diff --git a/packages/ai-config/src/schema.ts b/packages/ai-config/src/schema.ts index 77e5362..506a258 100644 --- a/packages/ai-config/src/schema.ts +++ b/packages/ai-config/src/schema.ts @@ -68,13 +68,13 @@ export const modelOverrideSchema = z .number() .int() .positive() - .describe("Largest number of input tokens accepted in one request.") + .describe("Maximum number of input tokens accepted in one request.") .optional(), maxOutputTokens: z .number() .int() .positive() - .describe("Largest number of tokens the model may generate in one response.") + .describe("Maximum number of tokens the model may generate in one response.") .optional(), protocol: protocolSchema .describe("API wire protocol for this model, overriding the provider's protocol.") @@ -135,13 +135,13 @@ export const customModelSchema = z .number() .int() .positive() - .describe("Largest number of input tokens accepted in one request.") + .describe("Maximum number of input tokens accepted in one request.") .optional(), maxOutputTokens: z .number() .int() .positive() - .describe("Largest number of tokens the model may generate in one response.") + .describe("Maximum number of tokens the model may generate in one response.") .optional(), protocol: protocolSchema .describe("API wire protocol for this model, overriding the provider's protocol.") @@ -265,11 +265,24 @@ export const azureAuthModeSchema = z.enum(["apikey", "entra"]); */ export const azureConfigSchema = z .object({ - authMode: azureAuthModeSchema.optional(), - scope: z.string().optional(), - tenantId: z.string().optional(), + authMode: azureAuthModeSchema + .describe( + "How to authenticate: `apikey` (default, back-compat) or `entra` for Microsoft Entra ID sign-in.", + ) + .optional(), + scope: z + .string() + .describe("OAuth scope requested when acquiring a Microsoft Entra ID token.") + .optional(), + tenantId: z + .string() + .describe( + "Microsoft Entra ID tenant to authenticate against. Uses the default tenant if unset.", + ) + .optional(), }) - .strict(); + .strict() + .describe("Microsoft Entra ID connection settings for the built-in ms-foundry provider."); export const snowflakeConfigSchema = z .object({ @@ -301,7 +314,7 @@ export const snowflakeConfigSchema = z connectionName: z .string() .describe( - "Which connection from `connections.toml` to use. Node-backed surfaces only; Positron uses its own Snowflake sign-in.", + "Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.", ) .optional(), }) @@ -659,9 +672,7 @@ export const providersMapSchema = z customProviderEntrySchema, ), ) - .describe( - "Providers you declare yourself, keyed by a name of your choosing. Available on Node-backed surfaces (Standalone, Desktop, RStudio, and the Terminal); Positron does not expose custom providers.", - ) + .describe("Providers you declare yourself, keyed by a name of your choosing.") .optional(), }) .strict(); From 59727795f519c1681a608df608cbc0d7b9594046 Mon Sep 17 00:00:00 2001 From: sharon wang <25834218+sharon-wang@users.noreply.github.com> Date: Wed, 26 Aug 2026 13:16:06 -0400 Subject: [PATCH 4/4] Stop customHeaders description claiming universal delivery It said headers are "sent with every request," but several built-in providers (copilot, google-vertex, ollama, lmstudio) never look at customHeaders at all. Since this field is shared across every provider block, the description needs to hold true everywhere it's attached, not just for the providers that happen to forward it. --- packages/ai-config/providers.schema.json | 64 +++++++++---------- .../src/generated/providers-schema-source.ts | 2 +- packages/ai-config/src/schema.ts | 2 +- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/ai-config/providers.schema.json b/packages/ai-config/providers.schema.json index 8f8e2d3..4a2bba7 100644 --- a/packages/ai-config/providers.schema.json +++ b/packages/ai-config/providers.schema.json @@ -25,7 +25,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -315,7 +315,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -590,7 +590,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -865,7 +865,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -1142,7 +1142,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -1432,7 +1432,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -1722,7 +1722,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -2012,7 +2012,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -2317,7 +2317,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -2607,7 +2607,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -2920,7 +2920,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -3225,7 +3225,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -3515,7 +3515,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -3805,7 +3805,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -4095,7 +4095,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -4385,7 +4385,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -4675,7 +4675,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -4965,7 +4965,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -5265,7 +5265,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -5551,7 +5551,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -5837,7 +5837,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -6112,7 +6112,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -6402,7 +6402,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -6677,7 +6677,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -6975,7 +6975,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -7250,7 +7250,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -7525,7 +7525,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -7800,7 +7800,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -8075,7 +8075,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -8350,7 +8350,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -8625,7 +8625,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" @@ -8919,7 +8919,7 @@ "description": "Header value.", "type": "string" }, - "description": "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "description": "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", "propertyNames": { "description": "Header name.", "type": "string" diff --git a/packages/ai-config/src/generated/providers-schema-source.ts b/packages/ai-config/src/generated/providers-schema-source.ts index 5287457..d1d9ba0 100644 --- a/packages/ai-config/src/generated/providers-schema-source.ts +++ b/packages/ai-config/src/generated/providers-schema-source.ts @@ -9,7 +9,7 @@ * next to providers.json without resolving a file at runtime (which fails in * bundled consumers — see the generator's header for why). */ -const MINIFIED = "{\"$id\":\"https://posit.co/schemas/providers.schema.json\",\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"additionalProperties\":false,\"description\":\"Configuration file for AI provider connections, enablement, and model overrides. See https://github.com/posit-dev/assistant for documentation.\",\"properties\":{\"$schema\":{\"description\":\"Path or URL of the JSON Schema for this file. Editors use it for validation and autocomplete.\",\"type\":\"string\"},\"providers\":{\"additionalProperties\":false,\"description\":\"Provider configuration, keyed by built-in provider id, plus the reserved `default` and `custom` keys.\",\"properties\":{\"anthropic\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in anthropic provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"bedrock\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in bedrock provider.\",\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"connect\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in connect provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"copilot\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in copilot provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"custom\":{\"additionalProperties\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai-compatible\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"anthropic\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"gemini\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"aws\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":{\"const\":\"snowflake\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"google-vertex\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ollama\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"lmstudio\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"deepseek\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openrouter\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ms-foundry\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"litellm\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"portkey\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"}]},\"description\":\"Providers you declare yourself, keyed by a name of your choosing.\",\"propertyNames\":{\"description\":\"Name of your choosing, also used as the display name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in databricks provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Databricks workspace settings.\",\"properties\":{\"host\":{\"description\":\"Databricks workspace host. This is not a chat base URL: the serving-endpoint URL is derived from it.\",\"type\":\"string\"}},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"deepseek\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in deepseek provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"default\":{\"additionalProperties\":false,\"description\":\"Baseline applied to every provider that does not set the same key itself.\",\"properties\":{\"enabled\":{\"description\":\"Default enablement for providers that do not set `enabled` themselves.\",\"type\":\"boolean\"}},\"type\":\"object\"},\"gemini\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in gemini provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"google-vertex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in google-vertex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"litellm\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in litellm provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"lmstudio\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in lmstudio provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ms-foundry\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ms-foundry provider.\",\"properties\":{\"azure\":{\"additionalProperties\":false,\"description\":\"Microsoft Entra ID connection settings for the built-in ms-foundry provider.\",\"properties\":{\"authMode\":{\"description\":\"How to authenticate: `apikey` (default, back-compat) or `entra` for Microsoft Entra ID sign-in.\",\"enum\":[\"apikey\",\"entra\"],\"type\":\"string\"},\"scope\":{\"description\":\"OAuth scope requested when acquiring a Microsoft Entra ID token.\",\"type\":\"string\"},\"tenantId\":{\"description\":\"Microsoft Entra ID tenant to authenticate against. Uses the default tenant if unset.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ollama\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ollama provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai-compatible\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai-compatible provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openrouter\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openrouter provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"portkey\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in portkey provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"positai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in positai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"positaiLogin\":{\"additionalProperties\":false,\"description\":\"Posit sign-in settings for the built-in positai provider.\",\"properties\":{\"clientId\":{\"description\":\"OAuth client id used for the device-authorization sign-in flow.\",\"type\":\"string\"},\"host\":{\"description\":\"Posit host to sign in against. The device-authorization and token URLs are derived from it.\",\"type\":\"string\"},\"scope\":{\"description\":\"Space-separated OAuth scopes requested at sign-in.\",\"type\":\"string\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"snowflake-cortex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in snowflake-cortex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"type\":\"object\"},\"version\":{\"const\":1,\"description\":\"Version of this config format. Always 1.\",\"type\":\"number\"}},\"title\":\"Posit AI Provider Configuration\",\"type\":\"object\"}"; +const MINIFIED = "{\"$id\":\"https://posit.co/schemas/providers.schema.json\",\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"additionalProperties\":false,\"description\":\"Configuration file for AI provider connections, enablement, and model overrides. See https://github.com/posit-dev/assistant for documentation.\",\"properties\":{\"$schema\":{\"description\":\"Path or URL of the JSON Schema for this file. Editors use it for validation and autocomplete.\",\"type\":\"string\"},\"providers\":{\"additionalProperties\":false,\"description\":\"Provider configuration, keyed by built-in provider id, plus the reserved `default` and `custom` keys.\",\"properties\":{\"anthropic\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in anthropic provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"bedrock\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in bedrock provider.\",\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"connect\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in connect provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"copilot\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in copilot provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"custom\":{\"additionalProperties\":{\"oneOf\":[{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai-compatible\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"anthropic\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openai\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"gemini\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"aws\":{\"additionalProperties\":false,\"description\":\"AWS connection settings for Bedrock. Credentials are not stored here.\",\"properties\":{\"profile\":{\"description\":\"Named profile from your AWS config and credentials files.\",\"type\":\"string\"},\"region\":{\"description\":\"AWS region to call, such as `us-east-1`.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"aws\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"},\"type\":{\"const\":\"snowflake\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"google-vertex\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ollama\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"lmstudio\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"deepseek\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"openrouter\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"ms-foundry\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"litellm\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"},{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"required\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":{\"const\":\"portkey\",\"description\":\"Which provider client handles this entry.\",\"type\":\"string\"}},\"required\":[\"type\"],\"type\":\"object\"}]},\"description\":\"Providers you declare yourself, keyed by a name of your choosing.\",\"propertyNames\":{\"description\":\"Name of your choosing, also used as the display name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in databricks provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"databricks\":{\"additionalProperties\":false,\"description\":\"Databricks workspace settings.\",\"properties\":{\"host\":{\"description\":\"Databricks workspace host. This is not a chat base URL: the serving-endpoint URL is derived from it.\",\"type\":\"string\"}},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"deepseek\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in deepseek provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"default\":{\"additionalProperties\":false,\"description\":\"Baseline applied to every provider that does not set the same key itself.\",\"properties\":{\"enabled\":{\"description\":\"Default enablement for providers that do not set `enabled` themselves.\",\"type\":\"boolean\"}},\"type\":\"object\"},\"gemini\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in gemini provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"google-vertex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in google-vertex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"googleCloud\":{\"additionalProperties\":false,\"description\":\"Google Cloud connection settings for Vertex AI.\",\"properties\":{\"location\":{\"description\":\"Google Cloud region for Vertex AI, such as `us-central1`.\",\"type\":\"string\"},\"project\":{\"description\":\"Google Cloud project id for Vertex AI.\",\"type\":\"string\"}},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"litellm\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in litellm provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"lmstudio\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in lmstudio provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ms-foundry\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ms-foundry provider.\",\"properties\":{\"azure\":{\"additionalProperties\":false,\"description\":\"Microsoft Entra ID connection settings for the built-in ms-foundry provider.\",\"properties\":{\"authMode\":{\"description\":\"How to authenticate: `apikey` (default, back-compat) or `entra` for Microsoft Entra ID sign-in.\",\"enum\":[\"apikey\",\"entra\"],\"type\":\"string\"},\"scope\":{\"description\":\"OAuth scope requested when acquiring a Microsoft Entra ID token.\",\"type\":\"string\"},\"tenantId\":{\"description\":\"Microsoft Entra ID tenant to authenticate against. Uses the default tenant if unset.\",\"type\":\"string\"}},\"type\":\"object\"},\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"ollama\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in ollama provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openai-compatible\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openai-compatible provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"openrouter\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in openrouter provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"portkey\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in portkey provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"positai\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in positai provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"positaiLogin\":{\"additionalProperties\":false,\"description\":\"Posit sign-in settings for the built-in positai provider.\",\"properties\":{\"clientId\":{\"description\":\"OAuth client id used for the device-authorization sign-in flow.\",\"type\":\"string\"},\"host\":{\"description\":\"Posit host to sign in against. The device-authorization and token URLs are derived from it.\",\"type\":\"string\"},\"scope\":{\"description\":\"Space-separated OAuth scopes requested at sign-in.\",\"type\":\"string\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"}},\"type\":\"object\"},\"snowflake-cortex\":{\"additionalProperties\":false,\"description\":\"Configuration for the built-in snowflake-cortex provider.\",\"properties\":{\"baseUrl\":{\"description\":\"Base URL for the provider's API. Some providers need a version segment: `https://api.anthropic.com/v1` for Anthropic, `https://api.openai.com/v1` for OpenAI, and `https://generativelanguage.googleapis.com/v1beta` for Gemini. A bare host will fail for those.\",\"type\":\"string\"},\"customHeaders\":{\"additionalProperties\":{\"description\":\"Header value.\",\"type\":\"string\"},\"description\":\"Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.\",\"propertyNames\":{\"description\":\"Header name.\",\"type\":\"string\"},\"type\":\"object\"},\"enabled\":{\"description\":\"Whether this provider is available. Set to false to hide it from the model picker.\",\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Endpoint URL for a self-hosted provider such as Ollama or LM Studio, for example `http://localhost:11434`.\",\"type\":\"string\"},\"endpoints\":{\"additionalProperties\":{\"description\":\"Base URL to use for this protocol.\",\"type\":\"string\"},\"description\":\"Base URL overrides for one protocol at a time, keyed by protocol. Use this when every model on a protocol shares a path that the provider's other models do not.\",\"propertyNames\":{\"description\":\"API wire protocol used to talk to a model. Set this only when a provider or model does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"type\":\"object\"},\"models\":{\"additionalProperties\":false,\"description\":\"Which models this provider offers, and how their metadata is filled in.\",\"properties\":{\"allow\":{\"description\":\"Model ids to offer. When this list is non-empty it is exclusive: no other model from this provider is offered.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"custom\":{\"description\":\"Models to declare yourself, for models the provider does not return from discovery.\",\"items\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"id\":{\"description\":\"Model id sent to the provider's API.\",\"minLength\":1,\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"minLength\":1,\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"name\",\"maxContextLength\",\"supportsTools\",\"supportsImages\",\"supportsToolResultImages\",\"supportsWebSearch\"],\"type\":\"object\"},\"type\":\"array\"},\"deny\":{\"description\":\"Model ids to hide. Applied after `allow`, so a model listed in both is hidden.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"discovery\":{\"description\":\"Whether to ask the provider for its model list. `auto` discovers models from the provider; `off` offers only the models declared under `models.custom`.\",\"enum\":[\"auto\",\"off\"],\"type\":\"string\"},\"overrides\":{\"additionalProperties\":{\"additionalProperties\":false,\"properties\":{\"baseUrl\":{\"description\":\"Base URL for this model only, overriding the provider's base URL.\",\"type\":\"string\"},\"family\":{\"description\":\"Model family, used for grouping models and for selecting family-specific system prompt content.\",\"type\":\"string\"},\"maxContextLength\":{\"description\":\"Total context window, in tokens.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxInputTokens\":{\"description\":\"Maximum number of input tokens accepted in one request.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"maxOutputTokens\":{\"description\":\"Maximum number of tokens the model may generate in one response.\",\"exclusiveMinimum\":0,\"maximum\":9007199254740991,\"type\":\"integer\"},\"name\":{\"description\":\"Display name shown in the model picker.\",\"type\":\"string\"},\"protocol\":{\"description\":\"API wire protocol for this model, overriding the provider's protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"supportedInputMediaTypes\":{\"description\":\"Media types the model accepts as input, such as `image/png`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"supportsImages\":{\"description\":\"Whether the model accepts images as input.\",\"type\":\"boolean\"},\"supportsToolResultImages\":{\"description\":\"Whether the model accepts images returned by a tool result.\",\"type\":\"boolean\"},\"supportsTools\":{\"description\":\"Whether the model can call tools.\",\"type\":\"boolean\"},\"supportsWebSearch\":{\"description\":\"Whether the model supports the provider's own web search.\",\"type\":\"boolean\"},\"thinkingEffortLevels\":{\"description\":\"Thinking effort levels this model accepts. The set varies by model, for example `off`, `low`, `medium`, `high`, `xhigh`.\",\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"description\":\"Metadata patches for models the provider already returns, keyed by model id. Only the fields you set are changed.\",\"propertyNames\":{\"description\":\"Model id to patch.\",\"type\":\"string\"},\"type\":\"object\"}},\"type\":\"object\"},\"protocol\":{\"description\":\"API wire protocol for this provider. Set this only when the provider does not use its default protocol.\",\"enum\":[\"anthropic-messages\",\"openai-chat\",\"openai-responses\",\"mlflow-responses\",\"bedrock-converse\",\"google-generative\"],\"type\":\"string\"},\"snowflake\":{\"additionalProperties\":false,\"description\":\"Snowflake connection settings. Credentials are not stored here.\",\"properties\":{\"account\":{\"description\":\"Snowflake account identifier.\",\"type\":\"string\"},\"connectionName\":{\"description\":\"Which connection from `connections.toml` to use. Ignored in Positron, which uses its own Snowflake sign-in.\",\"type\":\"string\"},\"home\":{\"description\":\"Directory holding `connections.toml`, the same thing `SNOWFLAKE_HOME` sets. Point this at a managed directory when your credentials are not in the default location.\",\"type\":\"string\"},\"host\":{\"description\":\"Snowflake host name. Set this when the account identifier alone does not resolve to the right host.\",\"type\":\"string\"}},\"type\":\"object\"}},\"type\":\"object\"}},\"type\":\"object\"},\"version\":{\"const\":1,\"description\":\"Version of this config format. Always 1.\",\"type\":\"number\"}},\"title\":\"Posit AI Provider Configuration\",\"type\":\"object\"}"; let cached: string | undefined; diff --git a/packages/ai-config/src/schema.ts b/packages/ai-config/src/schema.ts index 506a258..2c28fbb 100644 --- a/packages/ai-config/src/schema.ts +++ b/packages/ai-config/src/schema.ts @@ -374,7 +374,7 @@ const baseConnectionFields = { customHeaders: z .record(z.string().describe("Header name."), z.string().describe("Header value.")) .describe( - "Extra HTTP headers sent with every request to this provider, for proxy tenancy or routing markers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", + "Extra HTTP headers sent with each request to this provider, for proxy tenancy or routing markers, on providers whose transport supports custom headers. Do not put credentials or SDK-managed headers such as `Authorization`, `x-api-key`, or `anthropic-version` here.", ) .optional(), protocol: protocolSchema