feat(models): 「模型设置」接官方厂家目录 + 按官方页结构重做界面(档案 87 补做)
用户实测反馈:新增条目看不懂、厂家选择太少且国内一家都没有。根因是**第一版只做了手填表单**,没接官方 pi-ai 自带目录(实测 38 家,国内 11 家:蚂蚁 / 通义千问 / 小米 / 月之暗面 / 智谱 / MiniMax)。 - 新文件 src/web/model-catalog.ts:只读官方 data/*.json(10 分钟缓存,不导入 pi-ai 运行时);中文名走显示用静态表,选取范围以目录为准 - 新增 GET /api/me/model-providers(38 家 + cn 分组 + modelCount + 模型名;排除 deepseek —— 平台已有内置入口) - POST /api/me/keys 新增 provider 参数:**目录厂家只需 API 密钥**(端点/协议/模型全由官方目录兜底 —— 官方 config.d.ts 明示 route 命中即继承默认) - refForEntry 判据由「baseUrl 为空」改为「**没有 route**」:否则目录厂家的 key 会被写进 DEEPSEEK_API_KEY - SettingsEntry 的 baseURL/api/models 改为可选:目录厂家只写 apiKeyEnv(写得越少越不容易漂) - 前端按官方页结构重写:提供方行(厂家/说明/状态/操作)+ 新增**先选厂家**(中国大陆 / 国际分组 / 自定义)+ 保留并强化 admin 的「平台共享模型」区块 - 真环境验收:目录端点 38 家 / 国内 11 家;加 moonshotai-cn 只给 key → settings.yaml 仅 apiKeyEnv;删后整块消失
This commit is contained in:
1 parent
918f1d3a51
commit
022b1f770c
7 files changed
+489
-121
No files matched your search
+18
-10
@@ -183,16 +183,24 @@ export async function buildServer(config: ServerConfig): Promise<FastifyInstance
|
||||
}
|
||||
seen.add(ref)
|
||||
creds.push({ ref, value })
|
||||
// 只有"自定义厂家"才写 settings.yaml:内置 DeepSeek 由官方 `dsh-llm-deepseek` 自己管
|
||||
// (它的 route 是 `deepseek-official`,不是 `llm-pi-ai` 下的键)。
|
||||
if (row.baseUrl !== null && row.baseUrl !== '' && row.route !== null && row.route !== '') {
|
||||
providers.push({
|
||||
route: row.route,
|
||||
apiKeyEnv: ref,
|
||||
baseURL: row.baseUrl,
|
||||
api: normalizeProtocol(row.api),
|
||||
models: parseModels(row.models),
|
||||
})
|
||||
// 有 route 才写 settings.yaml。两种情形:
|
||||
// · **目录厂家**(route 命中官方 pi-ai catalog,baseUrl 为空)⇒ 只写 `apiKeyEnv`,
|
||||
// endpoint / 协议 / 模型目录全由官方目录提供(档案 87 补做)。
|
||||
// · **自定义厂家**(baseUrl 非空)⇒ endpoint + 协议 + 模型清单必须齐全。
|
||||
// 内置 DeepSeek 没有 route ⇒ 只写 `refs.DEEPSEEK_API_KEY`,不进 settings.yaml。
|
||||
const route = row.route ?? ''
|
||||
if (route !== '') {
|
||||
if (row.baseUrl === null || row.baseUrl === '') {
|
||||
providers.push({ route, apiKeyEnv: ref })
|
||||
} else {
|
||||
providers.push({
|
||||
route,
|
||||
apiKeyEnv: ref,
|
||||
baseURL: row.baseUrl,
|
||||
api: normalizeProtocol(row.api),
|
||||
models: parseModels(row.models),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
const credFile = join(owner.home_dir, '.credentials.yaml')
|
||||
|
||||
Reference in new issue
Block a user