mirror of
https://git.openapi.site/https://github.com/desirecore/config-center.git
synced 2026-09-05 17:33:40 +08:00
7832ae26a9a51b0b985e7650016e8655e565a6ef
Anthropic provider 保留 Fable 5 / Opus 5 / Sonnet 5 / Haiku 4.5;Claude 订阅 provider 保留 Fable 5 / Opus 5 / Sonnet 5 / Haiku 4.5。 三个模型同时写入 provider.tombstones —— 仅从 models 数组删除只会触发 deprecated 软降级(保留本地数据),写入 tombstones 才是真删除,且客户端 resolver 的 resolveMappingModel() 只对 tombstone 模型执行「回退到同 serviceType 的其他可用 模型」,未 tombstone 的缺失模型会原样透传。因此写 tombstones 才能让存量会话平滑 迁移到 Opus 5,而不是继续指向一个已消失的模型名。 model-specs/anthropic.json 中三者的规格条目保留:规格库按 model_name 匹配任意 上游(含 OpenRouter 风格 vendor 前缀),与 provider 清单解耦——该文件本来就有 claude-sonnet-4-5 这类无 provider 条目的规格。删除会让经其他网关访问这些模型的 用户丢失上下文窗口/能力元数据。 用户侧 user-added / synced / ollama-discovery 来源的同名模型不受 tombstones 影响。
DesireCore Config Center
DesireCore 官方配置中心:托管 Provider / Model / Pricing / ServiceMap 数据,由
desirecore 客户端通过 npm run sync-config-center
脚本和运行时后台 fetch 拉取。
数据契约(Frozen Schema)
schemas/ 目录下的 JSON Schema 是已发布客户端的兼容契约。所有写入此仓库的数据必须通过
schemas/ 校验,否则会破坏老版本客户端。
历史背景
PR #1 曾把 reasoning 模型的 defaultTemperature / defaultTopP 写为 null,
导致已发布客户端(schema 严格 number)readComputeConfig 校验失败 → 同步路径死锁
→ 远程数据 revert 也救不了已污染的本地用户。详见 desirecore PR #471。
为防止此类事故重演,本仓库引入 frozen schema + CI 自动校验。
校验规则
| Schema | 适用文件 | 关键约束 |
|---|---|---|
provider.schema.json |
compute/providers/*.json、compute/coding-plans/*.json |
defaultTemperature/defaultTopP 必须是 number,禁止 null/string;additionalProperties: false |
manifest.schema.json |
manifest.json |
presetDataVersion 必须是递增整数 |
service-map.schema.json |
compute/service-map.json |
每条映射须含 modelName + providerId |
providers-index.schema.json |
两个 _index.json |
order 数组无重复 |
pricing.schema.json |
compute/pricing.json |
markupRatio / usdToCny 为正数 |
关键规则:reasoning 模型的温度参数
禁止:"defaultTemperature": null、"defaultTopP": null
正确做法:完全省略字段。
// ❌ 错误:会破坏 fix #471 之前的客户端
{ "modelName": "deepseek-reasoner", "defaultTemperature": null }
// ✅ 正确:reasoning 模型省略温度字段
{ "modelName": "deepseek-reasoner", "displayName": "DeepSeek Reasoner", ... }
关键规则:计价币种按 Provider 归属决定
- 国内 Provider 必须使用
priceCurrency: "CNY",并写入国内平台人民币价格。 - 国外 Provider 必须使用
priceCurrency: "USD",并写入美元价格。 - Provider 归属与其托管模型的产地冲突时,以 Provider 为准。例如,OpenRouter 托管的 Qwen 模型仍按 USD 计价;国内 Provider 托管的国外模型仍按 CNY 计价。
- 新增 Provider 时必须同步更新全量币种归属测试,避免未分类数据进入预置。
关键规则:新增字段需先升级老客户端 schema
provider 和 model 顶层均启用 additionalProperties: false。如需新增字段:
- 先在 desirecore 主仓
lib/schemas/agent-service/compute.ts升级 schema 接受新字段 - 发布新版本客户端
- 等大部分用户升级
- 再更新本仓库的 frozen schema 和数据
否则老客户端会因未知字段校验失败死锁。
本地校验
npm install
npm run validate # 校验所有数据文件
npm test # 跑单元测试(含反例测试)
CI(GitHub Actions)会在每个 PR 自动运行 validate 和 test,不通过禁止合并。
数据修改流程
- 编辑
compute/providers/<name>.json、compute/coding-plans/<name>.json或compute/service-map.json - 编辑
compute/providers/_index.json或coding-plans/_index.json(新增/删除 provider 时) - 必须递增
manifest.json#presetDataVersion,并更新updatedAt npm run validate本地确认通过- 提 PR,等 CI 校验通过
- 合并到 main 后客户端会在下次后台 fetch(最长 30 分钟)拾取更新
客户端拉取机制
详见 desirecore CLAUDE.md "Config Center" 章节。
- 构建期同步:
npm run sync-config-center把数据复制到 desirecore 主仓lib/agent-service/defaults/ - 运行时同步:客户端启动后后台 git fetch 本仓库,每 30 分钟检查一次远程更新
- 版本比对:
presetDataVersion(递增整数)+ digest(SHA-256)双重校验
Description
Languages
JavaScript
97.5%
Shell
2.5%