mirror of
https://git.openapi.site/https://github.com/desirecore/config-center.git
synced 2026-06-06 05:50:50 +08:00
219 lines
8.3 KiB
JSON
219 lines
8.3 KiB
JSON
{
|
||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||
"$id": "https://desirecore.net/schemas/config-center/provider.schema.json",
|
||
"title": "Provider",
|
||
"description": "frozen baseline schema 镜像 desirecore d185299(fix #471 之前)的 computeProviderSchema/providerModelSchema,作为已发布客户端兼容契约。任何写入 compute/providers/*.json 或 compute/coding-plans/*.json 的数据都必须通过此校验,否则会破坏老客户端(已发布版本的 schema 无法理解超出此契约的字段或类型)。\n\n关键约束:\n- defaultTemperature / defaultTopP 必须是 number(不接受 null)—— 历史教训:曾因 null 写入导致老客户端校验失败死锁\n- 顶层与 model 内 additionalProperties 均为 false —— 新增字段必须先升级老客户端 schema 再推送数据",
|
||
"type": "object",
|
||
"required": [
|
||
"id",
|
||
"provider",
|
||
"label",
|
||
"baseUrl",
|
||
"apiKeyRef",
|
||
"apiKeyVerified",
|
||
"enabled",
|
||
"status",
|
||
"services",
|
||
"models"
|
||
],
|
||
"properties": {
|
||
"id": {
|
||
"type": "string",
|
||
"description": "提供商唯一标识符(如 provider-openai-001)",
|
||
"minLength": 1
|
||
},
|
||
"provider": {
|
||
"type": "string",
|
||
"description": "提供商标识:openai、anthropic、deepseek、dashscope(阿里云)等",
|
||
"minLength": 1
|
||
},
|
||
"label": {
|
||
"type": "string",
|
||
"description": "提供商显示名称(如 OpenAI、Anthropic、阿里云 DashScope)",
|
||
"minLength": 1
|
||
},
|
||
"baseUrl": {
|
||
"type": "string",
|
||
"description": "API 基础 URL(如 https://api.openai.com/v1)",
|
||
"minLength": 1
|
||
},
|
||
"apiFormat": {
|
||
"type": "string",
|
||
"description": "API 协议格式:openai-completions、anthropic-messages、openai-responses、google-generative-ai 等"
|
||
},
|
||
"mediaBaseUrl": {
|
||
"type": "string",
|
||
"description": "媒体 API 基础 URL。当 provider 使用 Anthropic 格式(baseUrl 指向 /anthropic 端点)但其媒体 API(图片/语音/视频/音乐)仍走 OpenAI /v1 端点时使用"
|
||
},
|
||
"apiKeyRef": {
|
||
"type": "string",
|
||
"description": "密钥引用名,对应 secrets.json 中的 key;空字符串表示未配置密钥"
|
||
},
|
||
"apiKeyVerified": {
|
||
"type": "boolean",
|
||
"description": "API Key 是否已通过验证"
|
||
},
|
||
"enabled": {
|
||
"type": "boolean",
|
||
"description": "是否启用此提供商"
|
||
},
|
||
"status": {
|
||
"type": "string",
|
||
"enum": ["configured", "unconfigured", "error"],
|
||
"description": "提供商状态"
|
||
},
|
||
"services": {
|
||
"type": "array",
|
||
"description": "支持的服务类型列表(如 chat、reasoning、vision、embedding)",
|
||
"items": { "type": "string" }
|
||
},
|
||
"priceCurrency": {
|
||
"type": "string",
|
||
"enum": ["USD", "CNY"],
|
||
"description": "价格货币单位。models 中的 inputPrice/outputPrice 均以此货币计价"
|
||
},
|
||
"accessMode": {
|
||
"type": "string",
|
||
"enum": ["api", "coding-plan"],
|
||
"description": "接入模式:api(按量付费)或 coding-plan(编程订阅套餐)"
|
||
},
|
||
"brandGroup": {
|
||
"type": "string",
|
||
"description": "品牌分组标识,UI 按此字段排序"
|
||
},
|
||
"codingPlan": {
|
||
"type": "object",
|
||
"description": "Coding Plan 专属配置(仅当 accessMode = coding-plan 时有效)",
|
||
"properties": {
|
||
"planTier": { "type": "string" },
|
||
"planLabel": { "type": "string" },
|
||
"quotas": {
|
||
"type": "object",
|
||
"properties": {
|
||
"per5h": { "type": "number", "minimum": 0 },
|
||
"perWeek": { "type": "number", "minimum": 0 },
|
||
"perMonth": { "type": "number", "minimum": 0 },
|
||
"per7d": { "type": "number", "minimum": 0 }
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"usageTracking": {
|
||
"type": "object",
|
||
"properties": {
|
||
"method": {
|
||
"type": "string",
|
||
"enum": ["rest-api", "response-header", "manual", "none"]
|
||
},
|
||
"endpoint": { "type": "string" },
|
||
"headerKeys": {
|
||
"type": "object",
|
||
"properties": {
|
||
"remaining": { "type": "string" },
|
||
"limit": { "type": "string" },
|
||
"reset": { "type": "string" }
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"consoleUrl": { "type": "string" }
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"modelIdOverride": { "type": "string" },
|
||
"maxConcurrent": { "type": "number", "minimum": 1 },
|
||
"expiresAt": { "type": "string", "format": "date-time" }
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"models": {
|
||
"type": "array",
|
||
"description": "此提供商下的可用模型列表",
|
||
"items": { "$ref": "#/definitions/model" }
|
||
},
|
||
"tombstones": {
|
||
"type": "array",
|
||
"description": "预置显式删除的模型 modelName 白名单",
|
||
"items": { "type": "string" }
|
||
}
|
||
},
|
||
"additionalProperties": false,
|
||
"definitions": {
|
||
"model": {
|
||
"type": "object",
|
||
"required": ["modelName", "displayName", "serviceType", "capabilities"],
|
||
"properties": {
|
||
"modelName": {
|
||
"type": "string",
|
||
"description": "模型 ID,用于 API 调用(如 gpt-5-mini、claude-sonnet-4)",
|
||
"minLength": 1
|
||
},
|
||
"displayName": {
|
||
"type": "string",
|
||
"description": "模型显示名称(如 GPT-5 Mini、Claude Sonnet 4)",
|
||
"minLength": 1
|
||
},
|
||
"serviceType": {
|
||
"type": ["string", "array"],
|
||
"items": { "type": "string" },
|
||
"description": "服务类型,支持单个字符串或数组:chat、reasoning、fast、responses、translation、tts、asr、voice_clone、realtime_voice、simultaneous_interpret、vision、ocr、image_gen、video_gen、embedding、rerank、omni、computer_use 等"
|
||
},
|
||
"description": {
|
||
"type": "string",
|
||
"description": "模型简要描述"
|
||
},
|
||
"contextWindow": {
|
||
"type": "number",
|
||
"description": "上下文窗口大小(token 数)",
|
||
"minimum": 0
|
||
},
|
||
"maxOutputTokens": {
|
||
"type": "number",
|
||
"description": "单次请求最大输出 token 数",
|
||
"minimum": 0
|
||
},
|
||
"capabilities": {
|
||
"type": "array",
|
||
"description": "模型能力标签:chat、vision、tool_use、code、reasoning 等",
|
||
"items": { "type": "string" }
|
||
},
|
||
"inputPrice": {
|
||
"type": "number",
|
||
"description": "输入价格(每百万 token),货币由 Provider.priceCurrency 决定",
|
||
"minimum": 0
|
||
},
|
||
"outputPrice": {
|
||
"type": "number",
|
||
"description": "输出价格(每百万 token),货币由 Provider.priceCurrency 决定",
|
||
"minimum": 0
|
||
},
|
||
"defaultTemperature": {
|
||
"type": "number",
|
||
"description": "默认温度参数(0-2)。【重要】必须是 number,禁止写为 null 或字符串。reasoning 等不支持温度的模型应完全省略此字段。null 会破坏 fix #471 之前发布的客户端(schema 严格 number),导致 readComputeConfig 死锁。",
|
||
"minimum": 0,
|
||
"maximum": 2
|
||
},
|
||
"defaultTopP": {
|
||
"type": "number",
|
||
"description": "默认 Top-P 参数(0-1)。【重要】必须是 number,禁止写为 null 或字符串。reasoning 等不支持 Top-P 的模型应完全省略此字段。null 会破坏 fix #471 之前发布的客户端,导致死锁。",
|
||
"minimum": 0,
|
||
"maximum": 1
|
||
},
|
||
"extra": {
|
||
"type": "object",
|
||
"description": "模型特定配置:如 TTS 模型音色列表、ASR 支持格式等",
|
||
"additionalProperties": true
|
||
},
|
||
"apiModelId": {
|
||
"type": "string",
|
||
"description": "实际传给上游 API 的 model 参数。当 modelName 与 API 期望名称不同时使用"
|
||
},
|
||
"source": {
|
||
"type": "string",
|
||
"enum": ["preset", "synced", "user-added", "ollama-discovery"],
|
||
"description": "模型来源。config-center 数据应统一为 preset"
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
}
|
||
}
|
||
}
|