bootstrapper/schemas/models.schema.json
Rama main · réplica de lectura del repositorio original.
{
"$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"]}
}
]
}
}
}