7.4 KiB
轻量模型选择器 — 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;未合并主工作区。