Initial TrueGrowth source import
This commit is contained in:
42
openspec/changes/add-runtime-model-discovery/proposal.md
Normal file
42
openspec/changes/add-runtime-model-discovery/proposal.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Change: 基于 Base URL 和 API Key 动态发现模型列表
|
||||
|
||||
## Why
|
||||
|
||||
当前设置页中的 `API Key` 和 `Base URL` 只负责保存配置,图片、视频、文本模型选择器仍然完全依赖静态常量表。
|
||||
这导致当用户接入一个新的兼容服务商时,无法像 Cherry Studio、Chatbox 等客户端一样直接通过 `/v1/models` 自动发现可用模型,也无法按服务商分类浏览返回的模型。
|
||||
|
||||
## What Changes
|
||||
|
||||
- 为设置页增加“根据当前 Base URL + API Key 获取模型列表”的能力
|
||||
- 新增运行时模型发现与缓存层,统一产出图片、视频、文本三类动态模型列表
|
||||
- 基于 `/v1/models` 返回中的 `id`、`owned_by`、`supported_endpoint_types` 对模型做类型和厂商分类
|
||||
- 让设置页和现有模型选择器优先使用动态模型列表;当发现失败或未配置时回退到静态模型表
|
||||
- 保留现有手输模型 ID 的兼容能力,不阻断自定义模型使用
|
||||
|
||||
## Impact
|
||||
|
||||
- Affected specs:
|
||||
- `runtime-model-discovery`
|
||||
- Affected code:
|
||||
- `packages/drawnix/src/components/settings-dialog/settings-dialog.tsx`
|
||||
- `packages/drawnix/src/components/ai-input-bar/ModelDropdown.tsx`
|
||||
- `packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx`
|
||||
- `packages/drawnix/src/components/ttd-dialog/ai-image-generation.tsx`
|
||||
- `packages/drawnix/src/components/ttd-dialog/ai-video-generation.tsx`
|
||||
- `packages/drawnix/src/constants/model-config.ts`
|
||||
- `packages/drawnix/src/utils/settings-manager.ts`
|
||||
- `packages/drawnix/src/utils/` 下新增模型发现/归类模块
|
||||
|
||||
## Analysis
|
||||
|
||||
基于 `2026-03-12` 的实测:
|
||||
|
||||
- `https://api.tu-zi.com/v1/models` 在携带有效 Bearer Token 时会返回标准模型列表,结构为 `{"data":[...], "object":"list", "success":true}`
|
||||
- `https://api.tu-zi.com/models` 不返回 JSON,而是返回站点 HTML,因此实现必须显式归一化到 `/v1/models`
|
||||
- 当前设置页默认保存的是 `https://api.tu-zi.com/v1`,但用户需求描述的是“基础 base URL”,因此发现逻辑需要兼容 `https://host` 和 `https://host/v1` 两种输入
|
||||
- 返回字段中没有现成的“模型类型”和“厂商中文名”,需要在前端做一层适配:
|
||||
- 模型类型:由 `supported_endpoint_types`、模型 ID 关键字共同推断
|
||||
- 厂商分类:由 `owned_by` 优先映射,必要时再回退到模型 ID 前缀/关键字映射
|
||||
- 现有 `ModelDropdown` 和 `VendorTabPanel` 强依赖静态 `ModelConfig.vendor` 枚举,因此动态模型不能直接透传接口原始字段,必须先转换成内部 `ModelConfig`
|
||||
|
||||
本次变更默认采用“显式触发同步”而不是“输入时自动请求”的交互,以避免设置弹窗在键入过程中频繁发起网络请求。
|
||||
Reference in New Issue
Block a user