mirror of
https://git.openapi.site/https://github.com/desirecore/config-center.git
synced 2026-09-06 00:53:44 +08:00
* feat(compute): 补 GLM-5.3 系列规格并标注 Ox Alpha 真身 Ox Alpha 是智谱 GLM-5.3-Flash 的匿名发布别名(canonical_slug z-ai/glm-5.3-flash-20260826,2026-08-26 揭晓后已从 OpenRouter 列表下架)。 改动: - model-specs/zhipu.json 新增 glm-5.3 与 glm-5.3-flash 正式规格。两者均 强制思考(z.ai 文档:thinking.type 仅接受 enabled;OpenRouter models API: reasoning.mandatory=true,supported_efforts=[max,high,low]),故 routing.reasoning.supportedModes 不含 off。按 #79 的教训只用 exact 匹配, 避免 glm-5.3* 误吞 glm-5.3-flash。 - model-specs/stealth.json 的 ox-alpha 用 spec.extra.modelOrigin 标注真身。 条目保留:云端算力可能仍以旧别名下发该模型。 - schemas/model-spec.schema.json 为 extra.thinkingOnly / thinkingDefault 补正式定义与 description。此前这两个键无任何说明,客户端因此从未消费, 用户选「关闭思考」即触发上游 400(见 desirecore#2307)。 - scripts/validate.mjs 新增静默失效键名巡检:extra 是开放对象,写错键名 既不报错也无告警。当前巡出 17 处扁平 extra.reasoningEffort。刻意只告警 不失败——存量取值需逐个核实各自接入面实际接受哪些 effort。 * docs(schema): 写明 extra.reasoning 与 thinkingOnly 的职责边界 provider schema 的 extra.reasoning 此前只有子字段 description、对象本身没有, 维护者看不出它与 model-spec 的 thinkingOnly 分别回答什么问题——issue desirecore#2307 的误解正源于此。补上对象级说明:本键答「接入面接受哪些 effort 值」且只能写在 provider model;thinkingOnly 答「off 能不能用」、不声明深度档位。
193 lines
11 KiB
JSON
193 lines
11 KiB
JSON
{
|
||
"$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-P(0-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"] },
|
||
"properties": {
|
||
"thinkingOnly": {
|
||
"type": "boolean",
|
||
"description": "模型强制思考、无法关闭(如 GLM-5.3 系列 thinking.type 仅接受 enabled)。true 时客户端把 off 从可选档位移除,并把内部 suppressThinking 降级为 auto,避免发出必然被上游拒绝的关闭参数。只描述模型固有属性,不声明接入面支持哪些深度档位——后者只能写在 provider model 的 extra.reasoning 中。"
|
||
},
|
||
"thinkingDefault": {
|
||
"type": "boolean",
|
||
"description": "模型默认开启思考。当前不改变客户端行为,仅供维护者参考。"
|
||
}
|
||
},
|
||
"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
|
||
}
|
||
}
|
||
}
|