Skip to content

测试与采集表单支持从接口获取可选模型列表 - #18

Open
Llj158 wants to merge 1 commit into
xqy2006:mainfrom
Llj158:feature/selectable-model-list
Open

Llj158 wants to merge 1 commit into
xqy2006:mainfrom
Llj158:feature/selectable-model-list

Conversation

@Llj158

@Llj158 Llj158 commented Sep 23, 2026

Copy link
Copy Markdown

PR:测试与采集表单支持从接口获取可选模型列表

当前「模型测试 → API 自动测试」和「指纹库管理 → 新建指纹」两处表单中的接口模型名都需要用户手工输入。多数 OpenAI 兼容网关(以及 Anthropic 官方 API)都提供 GET /v1/models 接口用于列出可用模型,但用户往往不知道自己的服务端到底支持哪些模型名,容易拼错或使用了与指纹库不一致的写法,导致测试/采集失败。

本 PR 在两处表单的「接口模型名」输入框旁增加获取模型按钮:填好 Base URL 与 API Key 后一键拉取上游模型列表,点击输入框即可从下拉列表中选择,无需手工输入。

改动内容(5 个文件,+142 / -3)

文件 改动
enrollment.py 新增 list_models():向 {base_url}/v1/models 发 GET 请求拉取模型列表
app.py 新增 POST /api/models 路由,成功返回 {"models": [...]},失败返回 502 与压缩后的可读错误
templates/index.html 两处「接口模型名」输入框加「获取模型」按钮,并新增 test-model-options / enroll-model-options 两个 datalist
static/app.js 新增 fetchModelOptions(),统一处理两个按钮的请求、填充与提示
static/styles.css 输入框与按钮同行、底部对齐;窄屏(≤640px)自动退化为单列

实现细节

  • 协议自动探测:与现有 request_completion 一致,先按 OpenAI 格式请求 /v1/models,失败再回退 Anthropic 格式(x-api-key + anthropic-version 头)。
  • 响应结构兼容:同时兼容 {"data": [{"id": ...}]}、{"models": [...]}、顶层纯数组,以及条目为 id / name 字段或纯字符串的情况;结果排序去重后返回。
  • 复用现有基础设施:请求沿用现有 User-Agent 伪装(规避 Cloudflare/WAF 对 Python 默认 UA 的 403 拦截),错误提示复用 _compact_upstream_error,WAF 拦截页会给出与聊天接口一致的排查建议。
  • 交互反馈:未填 Base URL / API Key 时提示先填写;请求中按钮置灰显示「获取中……」;成功后提示「已获取 N 个模型,点击输入框即可选择」;列表为空与请求失败分别给出对应提示,失败时展示后端返回的可读错误。
  • 不影响现有建议列表:「指纹名称」输入框的指纹库建议(model-options datalist)保持不变;本次仅替换两处「接口模型名」的候选来源。

测试验证

  • python -m py_compile app.py enrollment.py 通过。
  • 本地 mock 上游(返回 {"data": [{"id": "mock-a"}, {"id": "mock-b"}]})+ Flask test_client 冒烟测试:
    • list_models() 正确解析为 ['mock-a', 'mock-b'];
    • POST /api/models 返回 200 与解析后的模型列表;
    • 上游不可达时返回 502,错误信息含两次探测的具体原因,可读性良好;
    • 首页正确渲染两个「获取模型」按钮与两个 datalist。

兼容性 / 风险

  • 纯增量改动:不修改任何现有接口的请求/响应结构,旧客户端不受影响。
  • 少数网关不提供 GET /v1/models 或拒绝该路径,此时按钮会返回可读错误,用户仍可像之前一样手工输入模型名,不影响原有流程。
  • API Key 仅随单次请求发往用户自己填写的 Base URL,行为与现有聊天/采集请求一致,无新增数据流向。

截图

e5266371-aa46-41a2-a937-a46d6ac517ec

- 新增 POST /api/models:自动探测 OpenAI/Anthropic 格式,GET {base_url}/v1/models 拉取模型列表,兼容 data/models 数组、id/name 字段与纯字符串数组等响应结构,复用现有 User-Agent 伪装与 WAF 拦截错误提示
- “API 自动测试”与“新建指纹”表单的“接口模型名”旁新增“获取模型”按钮,获取后经 datalist 下拉选择,无需手工输入模型名
- 未填 Base URL/API Key 时提示先填写;成功提示模型数量;列表为空与请求失败分别给出提示
- 输入框与按钮同行排版、底部对齐,窄屏自动退化为单列

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant