Ctrl K
ComunidadGuías…

bootstrapper/schemas/models.schema.json

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Atlas model catalog",
  "description": "Validates services/ollama/models.yaml (flat sections) and services/litellm/models.yaml (provider-keyed sections).",
  "oneOf": [
    {
      "title": "Flat-sections format (Ollama)",
      "description": "Top-level keys are section names (content, embeddings, vision), each an array of model entries.",
      "$ref": "#/definitions/ollamaSectionMap"
    },
    {
      "title": "Provider-keyed format (LiteLLM / cloud)",
      "description": "Top-level keys are provider names; each value is a section map.",
      "type": "object",
      "properties": {
        "openai": {"$ref": "#/definitions/openaiSectionMap"},
        "anthropic": {"$ref": "#/definitions/anthropicSectionMap"},
        "openrouter": {"$ref": "#/definitions/openrouterSectionMap"}
      },
      "additionalProperties": {"$ref": "#/definitions/sectionMap"},
      "minProperties": 1
    }
  ],
  "definitions": {
    "sectionMap": {
      "type": "object",
      "properties": {
        "content": {"$ref": "#/definitions/contentEntryList"},
        "embeddings": {"$ref": "#/definitions/embeddingEntryList"},
        "vision": {"$ref": "#/definitions/visionEntryList"}
      },
      "additionalProperties": false,
      "minProperties": 1
    },
    "ollamaSectionMap": {
      "allOf": [
        {"$ref": "#/definitions/sectionMap"},
        {
          "properties": {
            "content": {"items": {"$ref": "#/definitions/ollamaChatAdapter"}},
            "embeddings": {"items": {"$ref": "#/definitions/ollamaEmbeddingAdapter"}},
            "vision": {"items": {"$ref": "#/definitions/ollamaChatAdapter"}}
          }
        }
      ]
    },
    "openaiSectionMap": {
      "allOf": [
        {"$ref": "#/definitions/sectionMap"},
        {"properties": {
          "content": {"items": {"$ref": "#/definitions/openaiAdapter"}},
          "embeddings": {"items": {"$ref": "#/definitions/openaiAdapter"}},
          "vision": {"items": {"$ref": "#/definitions/openaiAdapter"}}
        }}
      ]
    },
    "anthropicSectionMap": {
      "allOf": [
        {"$ref": "#/definitions/sectionMap"},
        {"properties": {
          "content": {"items": {"$ref": "#/definitions/anthropicAdapter"}},
          "embeddings": {"items": {"$ref": "#/definitions/anthropicAdapter"}},
          "vision": {"items": {"$ref": "#/definitions/anthropicAdapter"}}
        }}
      ]
    },
    "openrouterSectionMap": {
      "allOf": [
        {"$ref": "#/definitions/sectionMap"},
        {"properties": {
          "content": {"items": {"$ref": "#/definitions/openrouterAdapter"}},
          "embeddings": {"items": {"$ref": "#/definitions/openrouterAdapter"}},
          "vision": {"items": {"$ref": "#/definitions/openrouterAdapter"}}
        }}
      ]
    },
    "contentEntryList": {
      "type": "array",
      "items": {
        "allOf": [
          {"$ref": "#/definitions/entry"},
          {"$ref": "#/definitions/chatSectionSemantics"}
        ]
      },
      "minItems": 1
    },
    "embeddingEntryList": {
      "type": "array",
      "items": {
        "allOf": [
          {"$ref": "#/definitions/entry"},
          {"$ref": "#/definitions/embeddingSectionSemantics"}
        ]
      },
      "minItems": 1
    },
    "visionEntryList": {
      "type": "array",
      "items": {
        "allOf": [
          {"$ref": "#/definitions/entry"},
          {"$ref": "#/definitions/chatSectionSemantics"}
        ]
      },
      "minItems": 1
    },
    "chatSectionSemantics": {
      "properties": {
        "kind": {"const": "chat"},
        "capabilities": {
          "properties": {
            "chat": {"const": true},
            "embedding": {"const": false}
          }
        }
      }
    },
    "embeddingSectionSemantics": {
      "properties": {
        "kind": {"const": "embedding"},
        "capabilities": {
          "properties": {
            "chat": {"const": false},
            "embedding": {"const": true}
          }
        },
        "request_defaults": {"type": "object", "maxProperties": 0}
      },
      "allOf": [
        {
          "if": {"required": ["metadata_version"]},
          "then": {"required": ["dim"]}
        }
      ]
    },
    "ollamaChatAdapter": {"properties": {"adapter": {"const": "ollama_chat"}}},
    "ollamaEmbeddingAdapter": {"properties": {"adapter": {"const": "ollama"}}},
    "openaiAdapter": {"properties": {"adapter": {"const": "openai"}}},
    "anthropicAdapter": {"properties": {"adapter": {"const": "anthropic"}}},
    "openrouterAdapter": {"properties": {"adapter": {"const": "openrouter"}}},
    "entry": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": {"type": "string", "minLength": 1},
        "default": {"type": "boolean"},
        "description": {"type": "string"},
        "badges": {"type": "array", "items": {"type": "string"}},
        "dim": {"type": "integer", "minimum": 1, "description": "Embedding output vector dimension. Selecting this model sets LANGMEM_EMBEDDING_DIM; the wizard lists 768-dim models first. See embedding_dimension_contract in bootstrapper/utils/model_resolver.py."},
        "metadata_version": {"const": 1},
        "kind": {"enum": ["chat", "embedding"]},
        "adapter": {"enum": ["ollama", "ollama_chat", "openai", "anthropic", "openrouter"]},
        "capabilities": {
          "type": "object",
          "properties": {
            "chat": {"type": "boolean"},
            "embedding": {"type": "boolean"},
            "tools": {"type": "boolean"},
            "vision": {"type": "boolean"},
            "reasoning": {"type": "boolean"},
            "structured_output": {"type": "boolean"}
          },
          "additionalProperties": false
        },
        "request_defaults": {
          "type": "object",
          "properties": {"think": {"type": "boolean"}},
          "additionalProperties": false
        },
        "recommended_roles": {
          "type": "array",
          "items": {"enum": ["extract", "keyword", "query", "judge", "embedding", "vision"]},
          "uniqueItems": true
        }
      },
      "additionalProperties": false,
      "allOf": [
        {
          "if": {
            "anyOf": [
              {"required": ["kind"]},
              {"required": ["adapter"]},
              {"required": ["capabilities"]},
              {"required": ["request_defaults"]},
              {"required": ["recommended_roles"]}
            ]
          },
          "then": {"required": ["metadata_version"]}
        }
      ]
    }
  }
}