4.0 KiB
4.0 KiB
id, title, phase, deps, status, created
| id | title | phase | deps | status | created | ||
|---|---|---|---|---|---|---|---|
| T-681 | 自定义网关模型名称重命名 | 5 |
|
TODO | 2026-07-21 |
T-681 自定义网关模型名称重命名
问题 / 背景
设置页的「自定义网关」模型清单当前只有「新增」和「删除」。用户发现模型名称写错或希望调整命名时,只能重新新增一条模型并手动复制连接信息;若该模型被选为标题或图片默认模型,还可能留下失效的默认引用。
现有「保存」会连同模型连接参数一起写入,虽然技术上可编辑名称,但不适合作为清晰的名称管理操作,也不会迁移 ai.default_text_model、ai.default_image_model 对旧名称的引用。
方案
- 在自定义网关模型选择框右侧保持「新增」原位置,并在其右边、删除按钮左边新增「重命名」按钮,顺序固定为「新增」「重命名」「删除」。
- 仅在当前选中模型且没有连接测试任务运行时启用「重命名」。点击后用中文输入对话框显示当前名称作为默认值;取消不改动任何文件。
- 新名称去除首尾空白后校验:不能为空、不得与其它模型重名;校验失败以中文提示并保持当前选择和模型数据不变。
- 重命名只改模型
name,保留类别、启用状态、URL、模型 ID、API 类型、超时、额外参数和本地 API Key;不得在状态栏、弹窗或日志显示 API Key。 - 成功时立即写入
ai_models.json,并同步迁移当前配置中精确匹配旧名称的ai.default_text_model、ai.default_image_model,立即写入config.json。两份配置任一写入失败时向用户显示中文错误,不伪报成功。 - 写入成功后刷新模型清单并继续选中新名称;标题/图片默认模型下拉框显示新名称,状态栏显示“AI 模型已重命名:旧名称 → 新名称”。
- 为避免名称管理逻辑散落在 GUI 中,
appconfig提供可复用的重命名操作或等价的受控更新接口;其行为必须保留原模型字段并执行唯一性校验。
验收要点
- 自定义网关的模型操作顺序为「新增」「重命名」「删除」,默认网关面板不增加该操作。
- 选中模型后可重命名;无模型或连接测试运行时按钮不可用;取消输入不产生写入。
- 空名称、重复名称均不能保存,提示为中文,原模型及默认引用不变。
- 重命名后原模型的全部非名称字段(含 API Key)保持不变,新名称在模型清单、当前选择和默认模型下拉框中立即可见。
- 若标题/图片默认模型原先指向旧名称,对应默认引用迁移到新名称并持久化;未指向旧名称的引用不改变。
- 程序重启后模型名称和默认引用仍一致;状态栏、对话框、测试输出不泄露 API Key。
测试与文档
- 在
tests/test_appconfig.py覆盖模型改名、重名/空名称拒绝和字段保留。 - 在
tests/test_gui.py覆盖按钮顺序与状态、确认改名、取消、重名拒绝、默认标题/图片模型引用迁移及持久化回读。 - 更新
docs/routes.md的设置页自定义网关模型管理说明。
验证
py -3.10 -m unittest tests.test_appconfig tests.test_gui
py -3.10 -m unittest discover -s tests
py -3.10 -m ruff check app tests main.py
py -3.10 -m compileall app main.py
git diff --check
边界(不改什么)
- 不改默认网关、cmhub URL/API Key/别名、模型调用、余额查询或商品套图来源选择逻辑。
- 不改变模型类别、API 类型、连接参数、超时语义或 API Key 的本地保存方式。
- 不新增批量重命名、模型分组、导入导出、在线同步或删除模型时自动替换默认引用。
- 不改 Chrome/CDP、采集、AI 生成、更新蝦皮或打包逻辑。
关联
- T-677:生成网关来源选择与自定义网关模型配置。
- T-680:设置页网关来源单选框,保持现有同行布局和保存语义。
执行记录
- 待实现。