{
  "$id": "https://assistant.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"
        },
        "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"
        },
        "posit-connect": {
          "additionalProperties": false,
          "description": "Configuration for the built-in posit-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"
        },
        "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"
}
