Files
config-center/schemas/model-spec.schema.json

183 lines
10 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://desirecore.net/schemas/config-center/model-spec.schema.json",
"title": "ModelSpecFile",
"description": "模型规格库compute/model-specs/*.json数据契约。\n\n用途维护模型的唯一规格主数据内在参数上下文窗口、最大输出、能力标签、serviceType、默认采样参数等以及智能路由策略量级、排序、Agent 可选性和标准化 reasoning 合同)。同一事实不得再写入独立 smart-routing 目录。\n\nProvider 文件只描述接入面、可用性和明确的接入面覆盖;历史 Provider 条目中已有的规格字段为旧客户端兼容副本,不能覆盖本文件。\n\n严禁写入价格字段inputPrice/outputPrice/cache 等)——价签真相源永远是 NewAPI pricing。",
"type": "object",
"required": ["specs"],
"properties": {
"description": {
"type": "string",
"description": "文件说明(如所属厂商、收录范围)"
},
"specs": {
"type": "array",
"description": "模型规格条目列表",
"items": { "$ref": "#/definitions/modelSpec" }
}
},
"additionalProperties": false,
"definitions": {
"modelSpec": {
"type": "object",
"required": ["id", "spec"],
"properties": {
"id": {
"type": "string",
"description": "模型标准标识符,通常等于上游 model_name 原样(保留大小写与点号,如 claude-sonnet-4-6、MiniMax-M2.7)。同时作为精确匹配键;匹配时大小写/分隔符不敏感(由匹配器归一化)。",
"minLength": 1
},
"displayName": {
"type": "string",
"description": "模型友好显示名(如 Claude Sonnet 4.6)。命中后可覆盖 NewAPI 返回的原始 model_name优化 UI 展示。"
},
"family": {
"type": "string",
"description": "模型家族标识(如 claude-sonnet、gpt-5、gemini-2.5)。当精确/别名/pattern 匹配均失败时,按最长 family 前缀兜底匹配,返回保守参数并标记 inferred。"
},
"match": {
"type": "object",
"description": "通用匹配规则。匹配器会先做归一化(小写、去 vendor 前缀如 anthropic/、去网关装饰、统一分隔符、去日期戳与波动后缀再分层匹配exact > 归一化 exact > 去日期戳后 exact > pattern取最长 > family 兜底。",
"properties": {
"exact": {
"type": "array",
"description": "精确别名列表(除 id 外的已知精确名,含网关可能使用的全名)。归一化后比对。",
"items": { "type": "string", "minLength": 1 }
},
"patterns": {
"type": "array",
"description": "glob 模式列表(如 claude-sonnet-4-6*)。仅在 exact + 去日期戳仍无法覆盖变体时使用;避免对存在子型号的父模型(如 gpt-4o 之于 gpt-4o-mini使用宽泛通配以防误吞。多命中取最长 pattern。",
"items": { "type": "string", "minLength": 1 }
}
},
"additionalProperties": false
},
"routing": {
"type": "object",
"description": "智能路由策略。存在即表示该精确模型可进入路由候选;模型能力和 reasoning 合同均以本条目为准Provider 只能为接入面收紧。",
"required": ["tier", "routingPriority", "eligibleForAgent", "defaultReference", "reasoning"],
"properties": {
"tier": {
"type": "string",
"enum": ["flagship", "balanced", "lightweight"],
"description": "模型在智能路由中的能力量级。"
},
"routingPriority": {
"type": "integer",
"minimum": 0,
"maximum": 10000,
"description": "同一量级内的稳定优先级,数值越小越优先。"
},
"eligibleForAgent": {
"type": "boolean",
"description": "是否允许作为 Agent 主模型;媒体专用模型必须为 false。"
},
"defaultReference": {
"type": "boolean",
"description": "是否是默认模型的策略参考,只影响同级排序,不是强制选择。"
},
"reasoning": {
"type": "object",
"description": "模型级标准化 reasoning 合同。auto 为不发送参数off 为显式关闭Provider 接入面可收紧此集合,但不得扩张。",
"required": ["supportedModes", "defaultMode"],
"properties": {
"supportedModes": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string",
"enum": ["auto", "off", "minimal", "low", "medium", "high", "xhigh", "max"]
},
"description": "产品层可用的 reasoning 档位。"
},
"defaultMode": {
"type": "string",
"enum": ["auto", "off", "minimal", "low", "medium", "high", "xhigh", "max"],
"description": "没有显式请求时的策略默认档位,必须包含在 supportedModes 中。"
}
},
"allOf": [
{ "if": { "properties": { "defaultMode": { "const": "auto" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "auto" } } } } },
{ "if": { "properties": { "defaultMode": { "const": "off" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "off" } } } } },
{ "if": { "properties": { "defaultMode": { "const": "minimal" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "minimal" } } } } },
{ "if": { "properties": { "defaultMode": { "const": "low" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "low" } } } } },
{ "if": { "properties": { "defaultMode": { "const": "medium" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "medium" } } } } },
{ "if": { "properties": { "defaultMode": { "const": "high" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "high" } } } } },
{ "if": { "properties": { "defaultMode": { "const": "xhigh" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "xhigh" } } } } },
{ "if": { "properties": { "defaultMode": { "const": "max" } } }, "then": { "properties": { "supportedModes": { "contains": { "const": "max" } } } } }
],
"additionalProperties": false
}
},
"additionalProperties": false
},
"spec": {
"type": "object",
"description": "模型内在参数(不含任何价格字段)",
"properties": {
"contextWindow": {
"type": "number",
"description": "上下文窗口大小token 数)。下游用于上下文裁剪阈值计算。",
"minimum": 0
},
"maxOutputTokens": {
"type": "number",
"description": "单次请求最大输出 token 数。tags 字符串无法表达,是本规格库相对 NewAPI tags 的核心补充。",
"minimum": 0
},
"capabilities": {
"type": "array",
"description": "模型能力标签chat、vision、tool_use、code、reasoning 等。与 NewAPI tags 解析结果取并集。",
"items": { "type": "string" }
},
"serviceType": {
"type": ["string", "array"],
"items": { "type": "string" },
"description": "服务类型单个字符串或数组chat、reasoning、fast、vision、embedding、image_gen、tts、asr 等。命中时优先于 tags 解析。"
},
"defaultTemperature": {
"type": ["number", "null"],
"description": "推荐默认温度0-2。null 表示模型不支持温度调节(如 reasoning 模型),调用方应跳过该参数。本文件为新文件,老客户端不读,故允许 null。",
"minimum": 0,
"maximum": 2
},
"defaultTopP": {
"type": ["number", "null"],
"description": "推荐默认 Top-P0-1。null 表示不支持调节。",
"minimum": 0,
"maximum": 1
},
"supportsReasoning": {
"type": "boolean",
"description": "是否为推理模型。用于运行时决定是否启用 reasoning 相关处理。"
},
"description": {
"type": "string",
"description": "模型简要描述(一句话特点与适用场景)。命中后可覆盖 NewAPI 原值。"
},
"extra": {
"type": "object",
"description": "模型内在附加配置(如 apiModelId 全名、推理预算等)。不含价格,也不得声明 Provider/接入面的 reasoning effort 能力。",
"not": { "required": ["reasoning"] },
"additionalProperties": true
},
"releasedAt": {
"type": "string",
"description": "厂商发布年月YYYY-MM 或 YYYY-MM-DD辅助人工判断模型新旧。无客户端行为仅供维护者参考何时清理该条规格。",
"pattern": "^\\d{4}-\\d{2}(-\\d{2})?$"
},
"retiredAt": {
"type": "string",
"description": "厂商宣布停止访问的日期YYYY-MM-DD辅助人工批量删除已退役的规格条目。无客户端行为仅作数据清理依据。",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
}
}