Files
prompt-optimizer/docs/workspace/model-selector-light.md
linshen 59430fed18 feat(ui): unify model selectors and isolate workspace model choices
(cherry picked from commit 1a416f4197f9ab4c6fc55f12517798f3253fd10d)
2026-10-29 17:14:55 +08:00

7.4 KiB
Raw Permalink Blame History

轻量模型选择器 — 2026-10-29

范围与实现

  • 实施工作树:model-selector-light;分支 feature/model-selector-light;基于 f43c061b。交付状态以 Git 提交记录为准;下文保留实施阶段的验证记录。
  • 沿用主工作区已确认的“原始提示词 / 优化工作区”文案和移除铅笔的修正。
  • 七个工作区的文本模型入口与文本测试列使用 TextModelSelector;后续图像生成专用入口也已接入共享菜单,保持原有配置类型和选择范围,详见“统一剩余模型入口”。
  • 收起显示“配置 · 模型”;展开按连接配置分组,每组默认最多 3 项。当前配置置顶,当前模型和最近模型优先。
  • 搜索覆盖完整已获取列表。“更多”进入单配置的可滚动列表;搜索、作用范围和管理配置入口保持可见。
  • 模型选择不会调用 updateModel。默认模型沿用原配置标识,保持旧测试结果的模型身份兼容;其他模型使用版本化的配置 ID + 模型 ID 引用,沿用现有会话保存路径。
  • Web / Electron modelManager.getModel 将引用解析为临时配置供请求使用,不在共享模型列表中新增或改写配置。
  • 模型列表按连接配置缓存、请求去重,连接变化会失效;每配置最多保存 12 个最近模型 ID。没有新增“激活模型列表”。
  • 继续使用现有字体、主题变量和 Lucide;原六个导航图标未调整。

自动检查

  • Core:24 项,包含选择引用、同配置不同模型、存储不变、实际 LLMService 的模拟适配器调用、Electron 解析、参数兼容。
  • UI:62 项,包含组件、工作区选择、功能模型回退和基础 / 上下文 / 图像会话持久化;比较设置组件另有 8 项通过。
  • 工作区选择器约束:4 项通过;语言结构一致性通过。
  • Core 构建、UI 构建及类型检查通过;改动的 UI 源码 ESLint 通过;git diff --check 通过。
  • 最后的弹层尺寸修正后重新运行选择器 4 项测试及 UI 构建,均通过。

浏览器检查

使用内置浏览器独立任务页,保留原有数据。服务来自本工作树,地址 http://127.0.0.1:18181/#/basic/user。

  • 基础系统、基础用户、上下文变量、上下文多消息、文生图、图生图、多图生图均确认显示共享文本模型组件;1280×720 没有页面横向溢出。
  • A 列切换至 DeepSeek V4 Pro,B 列和左侧优化模型保持不变;刷新后 A 列选择保留。
  • 已恢复原来的 A 列配置、模式和内容;比较角色恢复为“A 对照 · B 目标”。
  • 每配置默认行数不超过 3;SiliconFlow “更多”展示 98 项,列表可滚动;搜索 qwen 得到 45 个匹配项。
  • 390×844:菜单边界 x=16 到 374.4,底部 724;页面 scrollWidth=390,无横向溢出。临时视口已重置。
  • 未发起真实生成或付费推理请求;请求模型解析由模拟适配器回归覆盖。部分现有连接获取模型清单失败,保留已配置模型并提供重试,未宣称所有连接可用。

视觉 QA

依据已批准的收起 / 展开草图,与实际截图在同次图像输入中对照。草图是控件设计方向;完整页面继续沿用用户布局和当前主题。

检查面 结果与调整
文字 配置名弱化、模型名稍强调;重复的配置前缀缩短,完整名称可悬浮查看;长名称单行省略。
布局与留白 两个下拉合为一个;输入栏模型 / 模板宽度由 6:11 调为 9:8,主区域分栏不变。修正了窄窗口中两段名称都只显示少数字符的问题。
色彩 使用现有日间主题灰白色与浅选中底色,没有引入新品牌色或修改导航图标。
图标与图像 沿用 Lucide 搜索、箭头和勾选;无新装饰图片。
文案 保留“原始提示词 / 优化工作区”;菜单明确“配置”分组和当前工作区 / 测试列的作用范围。

实测还发现初版 Naive Popover 默认内边距导致手机横向溢出、桌面菜单底部裁切;已移除重复内边距,并按可用空间计算列表高度和展开方向。1280×720 的最终菜单底部为 699.8,底部入口完整可见。

本地截图位于工作树的 .codex-run/model-selector/(忽略目录,未入库):

  • closed-final.png:桌面收起状态。
  • open-final.png:桌面展开及跨配置搜索。
  • mobile-final.png:390×844 展开状态。

剩余限制:超长自定义配置名 / 模型名在窄控件内仍需省略;未把此次局部控件验收当作整站设计或真实推理验收。

组内配置入口修复

每组右侧原先的“配置”是静态说明,容易误认为可点击入口。现改为真正的按钮,通过应用层统一接口打开所点配置的现有编辑弹窗;底部“管理配置”仍打开完整列表。配置入口不会触发模型选择或保存,模型编辑沿用现有管理流程。

验证:选择器及模型管理组件共 11 项测试通过,UI 构建与类型检查通过;浏览器实测优化工作区和 A 测试列均能打开 DeepSeek 配置,取消后原选择保持不变。截图:.codex-run/model-selector/config-open-fixed.png。

统一剩余模型入口

所有模型列表复用 ModelSelector.vue 的展示、搜索、分组、每组最多三项、更多、键盘操作与视觉视口避让。TextModelSelector、ImageModelSelector 和 ModelIdSelector 只适配数据与选择含义,不再各自实现菜单。

入口 选择与保存范围
文本工作区 / 文本测试列 继续使用局部配置与模型引用,不修改共享连接配置。
图像生成测试列 继续选择已保存图像配置,保留传入的能力筛选,不改变其他列。
评估 / 图像识别功能设置 保存为各自全局功能偏好;支持所选配置内其他模型,并保留评估清除后跟随默认的规则。
文本 / 图像配置编辑 选择已有或自定义模型 ID、清除和刷新仍更新原表单草稿;保存才修改共享配置,取消保留旧值。

图像工作区原来单独的快捷标签会直接修改共享配置。该操作现在统一从组内“配置”进入原编辑弹窗并保存;模型修改功能保留,同时移除工作区重复标签,避免把共享编辑误认为列内选择。兼容导出的两种 QuickSwitch 内部也复用 ModelIdSelector,并明确即时修改共享配置的范围。

窄于 190px 的控件优先展示模型名,完整配置与模型名保留在 title 和展开列表中。菜单每次打开回到当前配置,从搜索或更多返回时重置滚动位置。菜单复用已有 useSelectMenuViewport,避免软键盘遮挡。

验证:8 个相关测试文件累计 56 项通过(含旧兼容组件、功能偏好持久化、草稿生命周期、局部选择及软键盘视口);四模式入口结构检查 4 项通过;UI 构建、类型检查与语言键结构检查通过。浏览器实测图像 A 列换成 OpenAI 时 B 列和优化模型未改变,随后恢复原值;DeepSeek 草稿输入自定义模型后取消,管理列表仍显示原模型。功能设置及图像编辑均正确打开共用菜单。390×844 下菜单范围 x=12…370.4,底部=648.8,文档宽度=390;未发送生成请求。

截图:unified-function.png、unified-draft.png、unified-image-final.png、unified-mobile.png(均在 .codex-run/model-selector/,未入库)。预览继续运行于 127.0.0.1:18181;未合并主工作区。