@cherrystudio/ 提供者- 注册
跨平台AI提供商和模型目录,Zod schemas,以及取景公用事业.
核心工作没有文件系统访问,网络,定时器,或应用程序服务.
节点文件加载可单独通过 /node。 。 。 .
安装
pnpm add @cherrystudio/provider-registry zod@^4.4.3
第一次发行版本为 0.1.0 通过更改器并使用 latest 标签.
Zod是一个对等依赖,所以应用程序可以
用同样的 Zod 安装来组成输出计划.
包装目录
import { createRegistry } from '@cherrystudio/provider-registry'
import { bundledCatalog } from '@cherrystudio/provider-registry/data'
const registry = createRegistry(bundledCatalog)
const provider = registry.findProvider('openai')
const model = registry.findModel('gpt-6.1-sol')
const override = registry.findOverride('cherryin', 'qwen/qwen3.5-9b')
捆绑包中包含所有三个经过验证的目录,可离线使用,包括: 在第一次发射。 仅导入核心不会装入任何目录 JSON.
| 条目 | 出口 |
|---|---|
@cherrystudio/provider-registry | createRegistry, (中文(简体) ), parseModelSnapshot计划、类型、清单、合同和纯公用事业 |
@cherrystudio/provider-registry/data | bundledCatalog |
@cherrystudio/provider-registry/data/providers | bundledProviders |
@cherrystudio/provider-registry/data/models | bundledModels |
@cherrystudio/provider-registry/data/provider-models | bundledProviderModels |
@cherrystudio/provider-registry/node | 文件阅读器, RegistryLoader 和桌面显示相容性策略 |
Raw JSON 也导出为 /data/providers.json, (中文(简体) ), /data/models.json,以及
/data/provider-models.json。每个文件保留其内容-hash version。 。 。 .
JavaScript数据条目避免了平台专用的JSON导入语法.
查询合同
createRegistry(catalog) 接受验证 RegistryCatalog。处理其投入
记录和返回的记录为只读;核心不深克隆或被冻结.
查询列表按只读数组键入.
| 方法 | 结果 |
|---|---|
listProviders() | 受托提供者定义 |
listModels() | 此快照中的基准模型 |
getOverridesForProvider(providerId) | 特定供应商的覆盖,而不是完整的服务型号清单 |
findProvider(providerId) | 精确提供者匹配,或 null |
findModel(modelId) | 精确的模型匹配,然后保持大小的回落,或者 null |
findOverride(providerId, modelId) | 在恢复正常倒计时前精确的划线/API ID匹配,或 null |
缺失的模型大小从不回落到另一个大小. Canonic 供应商查询 偏好在日期相近的 API 变体共存时使用自变体;每个日期相近的变体仍保留 可用自己的 API ID 地址 。 规范化只定位元数据:保留 API ID 通过模型发现返回,或用户在提出请求时明确提供. 普通目录密钥不是替换请求ID .
现有 lookupRegistryModel() 方便功能使用相同的匹配
规则和解决一个API的别名 通过其覆盖的 Cononical 模型ID.
下载快照
应用程序拥有下载、验证和激活功能. 在创建替换注册前分析两个模型文件 :
import { createRegistry, parseModelSnapshot } from '@cherrystudio/provider-registry'
import { bundledProviders } from '@cherrystudio/provider-registry/data/providers'
const snapshot = parseModelSnapshot({
models: JSON.parse(modelsText),
providerModels: JSON.parse(providerModelsText)
})
const replacement = createRegistry({ ...snapshot, providers: bundledProviders })
modelsText 财务报告和审定财务报表 providerModelsText 上述是应用程序提供的字符串.
parseModelSnapshot 验证其结构并应用每入计数器
向前兼容。 它不检查显示的散列、运行时间支持或新鲜度.
丢弃无效的信封; 不兼容的条目和未知的列表词汇被省略
根据共同计划。 提供者的路由不属于此输入.
在激活前,应用程序必须验证清单,两个文件版本, 它的运行时间支持语义学。 切换完整的快照一起。 一个 应用程序可以从捆绑后的数据开始,恢复相容的新保存快照, 并检查背景中的远程更新。 更新失败离开当前视图 可用 。 建立替换登记册不会改变现有的登记册.
内容散列证明身份,而不是时间顺序. 工作流程修订只是 在其出版物流中具有可比性。 应用程序必须保留源/源代码 决定保存或远程数据是否取代捆绑快照时的出处; 此软件包不会从散列或 npm 版本中创建命令 .
未签名的远程数据可能更新模型和提供者-模型覆盖,但不得 替换信任的提供者连接、目的地或证书。 应用程序 继续拥有自定义提供者、用户覆盖、产品排除和运行时间 能力预测。 在计划中承认一种推理方言并不意味着 应用程序的 Pi 或 AI SDK 适配器可以执行 .
节点文件加载
import { createRequire } from 'node:module'
import { RegistryLoader } from '@cherrystudio/provider-registry/node'
const require = createRequire(import.meta.url)
const loader = new RegistryLoader({
models: require.resolve('@cherrystudio/provider-registry/data/models.json'),
providers: require.resolve('@cherrystudio/provider-registry/data/providers.json'),
providerModels: require.resolve('@cherrystudio/provider-registry/data/provider-models.json')
})
const model = loader.findModel('gpt-4o')
loader.invalidate()
节点加载器读取懒散,共享可移植的搜索索引,并释放缓存
数据在闲置超时后. readModelRegistry, (中文(简体) ), readProviderRegistry,以及
readProviderModelRegistry 仍可读取一发.
兼容性和平台界限
- 套件版本描述公共JavaScript/TypeScript API.
REGISTRY_SCHEMA_VERSION描述遥远的JSON出版道.REGISTRY_MIN_APP_VERSION是该道的桌面语义地板,而不是 移动应用程序版本或证明另一个运行时间支持每个字段.CatalogManifestSchema和文件/schema常数可从核心中获取. 现有桌面isCatalogManifestCompatible(manifest, appVersion)政策 保留在/node; Mobile 拥有下载录用和旧cache修复.- 根和数据条目支持无害环境管理、共同JS和反应原生出口条件. 它们包含无节点文件系统或Electron导入. 实际的博览会/设备验收 仍然是消耗性应用程序整合检查的一部分.
发展
三个 data/*.json 文件生成。 编辑 src/creators/ 或者说 src/providers/
运行生成器; 永远不要手动编辑目录数据 。 贡献者指示和
架构文档存在于此软件包的源文件库中.
对于提供者连接或服务器工具选择器更改, --providers-only 重建
从承诺的模型目录中获取供应商配置和工具资格
提供者拥有的独立模型,而不获取上游目录 :
pnpm --filter @cherrystudio/provider-registry exec tsx scripts/generate-catalog.ts --write --providers-only
pnpm exec oxfmt --write packages/provider-registry/data/providers.json packages/provider-registry/src/patterns/server-tool-models.gen.ts
刷新一个犬科模型及其提供者的报价,同时保留无关
目录行, 使用 --model (重复它为多个模型). 这也是再生
来源自有的提供者配置和能力指数:
pnpm --filter @cherrystudio/provider-registry exec tsx scripts/generate-catalog.ts --write --model gemini-4-argon
pnpm exec oxfmt --write packages/provider-registry/data/*.json packages/provider-registry/src/patterns/*.gen.ts
选中的模型必须存在于新生成的目录中; 未知的ID失败
没有写文物。 奥米 --model 用于正常的全上游新鲜.
从单列波根:
pnpm --filter @cherrystudio/provider-registry build
pnpm --filter @cherrystudio/provider-registry test:package
pnpm --filter @cherrystudio/provider-registry compat:check
test:package 在工作空间外建造并安装一个柏油球,检查两个模块
格式和声明,为浏览器构建可移植的表面,并练习
反应本地导出分辨率 。 它要求访问 npm 注册.
在发布新的不兼容远程方案之前, 递增 REGISTRY_SCHEMA_VERSION
内 src/catalog.ts 乘以一个并运行 pnpm --filter @cherrystudio/provider-registry compat:baseline。 。 。 .
冻结基线 compat/ 不得重写。 运行时语义添加
提高桌面版底需要新流;现有流保留其流.
许可证
麻省理工学院. 见 自由主义。 。 。 .