Files
cmshoppe/docs/tasks/T-681.md
T

4.0 KiB

id, title, phase, deps, status, created
id title phase deps status created
T-681 自定义网关模型名称重命名 5
T-677
T-680
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:设置页网关来源单选框,保持现有同行布局和保存语义。

执行记录

  • 待实现。