{
  "type": "object",
  "properties": {
    "model": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "anthropic",
              "description": "Use Anthropic model"
            },
            "modelName": {
              "type": "string",
              "description": "The name of the model"
            },
            "secrets": {
              "type": "object",
              "properties": {
                "basePath": {
                  "type": "string",
                  "default": "https://api.anthropic.com",
                  "description": "The Anthropic base API url"
                },
                "apiKey": {
                  "type": "string",
                  "description": "The Anthropic API key"
                }
              },
              "additionalProperties": false,
              "description": "The Anthropic API secrets config"
            },
            "temperature": {
              "type": "number",
              "description": "The temperature for the Anthropic model"
            },
            "maxTokens": {
              "type": "number",
              "description": "The maximum number of tokens for the Anthropic model"
            },
            "topP": {
              "type": "number",
              "description": "The top P value for the Anthropic model"
            },
            "topK": {
              "type": "number",
              "description": "The top K value for the Anthropic model"
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "huggingFace",
              "description": "Use Open AI model"
            },
            "modelName": {
              "$ref": "#/properties/model/anyOf/0/properties/modelName"
            },
            "secrets": {
              "type": "object",
              "properties": {
                "basePath": {
                  "type": "string",
                  "description": "The base API url"
                },
                "apiKey": {
                  "type": "string",
                  "description": "The HuggingFace API key"
                }
              },
              "additionalProperties": false,
              "description": "The HuggingFace API secrets config"
            },
            "temperature": {
              "type": "number",
              "description": "The temperature for the HuggingFace model"
            },
            "maxTokens": {
              "type": "number",
              "description": "The maximum number of tokens for the HuggingFace model"
            },
            "topP": {
              "type": "number",
              "description": "The top P value for the HuggingFace model"
            },
            "topK": {
              "type": "number",
              "description": "The top K value for the HuggingFace model"
            },
            "frequencyPenalty": {
              "type": "number",
              "description": "The frequency penalty for the HuggingFace model"
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "openai",
              "description": "Use OpenAI model"
            },
            "modelName": {
              "$ref": "#/properties/model/anyOf/0/properties/modelName"
            },
            "secrets": {
              "type": "object",
              "properties": {
                "basePath": {
                  "type": "string",
                  "default": "https://api.openai.com/v1",
                  "description": "The OpenAI base API path"
                },
                "apiKey": {
                  "type": "string",
                  "description": "The OpenAI API key"
                },
                "organization": {
                  "type": "string",
                  "description": "The OpenAI organization"
                },
                "accessToken": {
                  "type": "string",
                  "description": "The OpenAI access token"
                }
              },
              "additionalProperties": false,
              "description": "The OpenAI API secrets config"
            },
            "temperature": {
              "type": "number",
              "description": "The temperature for the OpenAI model"
            },
            "maxTokens": {
              "type": "number",
              "description": "The maximum number of tokens for the OpenAI model"
            },
            "topP": {
              "type": "number",
              "description": "The top P value for the OpenAI model"
            },
            "frequencyPenalty": {
              "type": "number",
              "description": "The frequency penalty for the OpenAI model"
            },
            "presencePenalty": {
              "type": "number",
              "description": "The presence penalty for the OpenAI model"
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        }
      ],
      "description": "The LLM model configuration"
    },
    "includes": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {}
            ]
          }
        },
        {
          "type": "string"
        },
        {},
        {},
        {
          "type": "null"
        },
        {
          "not": {}
        }
      ],
      "default": null,
      "description": "The include patterns for filtering files"
    },
    "excludes": {
      "$ref": "#/properties/includes",
      "default": null,
      "description": "The exclude patterns for filtering files"
    },
    "respectGitIgnore": {
      "type": "boolean",
      "default": true,
      "description": "Whether to respect .gitignore rules"
    },
    "urlConfig": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "modelNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The model name that will be displayed in the model selector"
          },
          "httpRequestHeader": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional request headers are required"
          }
        },
        "additionalProperties": false
      },
      "default": {},
      "description": "Custom http request headers and models names for specific urls"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}