已开启
feat(web): 会话内切换模型时明确作用域提示(Issue #97) #150
feat(web): 会话内切换模型时明确作用域提示(Issue #97) #150
已开启
hugoxk创建于 22 天前
hugoxk
22 天前

What type of PR is this?

/kind feature


What does this PR do / why do we need it:

修复 Issue #97:会话内切换模型仅对当前会话生效且无提示,新会话又回到全局默认。

问题分析:

Composer 底部的模型胶囊点击后的切换只写入当前会话的 settingsOverrides.modelId(updateSessionSettings),但入口外观与全局设置无异,界面上没有说明作用域;用户下一天新建会话时模型回到项目/系统默认,反复困惑「我明明换过模型」。底层配置结构本身正确,缺的是作用域可见性,因此按 Issue 的「设计思路」只在交互层补提示,不动配置结构。

实现:

  • 切换器气泡内作用域说明:ModelPicker 弹层在标题下方新增提示(composer.modelPicker.scopeHint)——「此处的切换仅对当前会话生效;新会话使用项目或系统默认模型。」用户在选择前就能读到作用域,直接对治「入口看起来像全局设置」。样式用专用 .model-picker-scope-note(不与其他提示复用类名,避免与思考提示混淆)。
  • 切换成功 Toast 反馈:选中模型且写入成功后(updateSessionSettings 现在返回是否写入,禁用/运行中/请求失败都不会误报成功)推送 composer.modelSwitch.title/detail——「已将当前会话模型切换为 {model};仅对当前会话生效;新会话将继续使用默认模型,可在项目设置或系统设置中修改。」文案指向默认值的正确修改位置。
  • 双语(en + zh-CN)齐全;纯函数 modelSwitchNotice(modelName, t) 放在既有 composer 辅助函数旁,便于测试且无需渲染 App。

范围说明(增强项未实现):Issue 中「把 X 设为全局默认」的快捷动作标注为「可作为增强项评估」,且需要跨作用域写全局设置与相应确认交互,本 PR 不实现,留待方案评审后单独评估;本 PR 只交付 Issue 明确的「作用域提示」可观察结果。


Which issue(s) this PR fixes:

Fixes #97


Test Plan and Test result:What scenarios were tested, and what were the verification results(Function, performance, reliability, etc.):

验证提交:185f564(6 files, +93/-6,单 commit,基于最新 upstream/main fcd9690)

  • 会话内切换立即生效 + 反馈一致:modelSwitchNotice 测试断言标题包含所选模型名、详情说明「仅对当前会话生效 / 新会话继续用默认 / 可在项目设置或系统设置修改」(en + zh-CN 两语言各断言)。
  • 作用域提示在正确时机出现:react-test-renderer 测试点击触发器前弹层无提示节点(0 个),打开后出现 model-picker-scope-note 且文案为中文作用域说明。
  • 写入失败不误报:updateSessionSettings 返回值驱动 Toast,仅真实写入成功后提示(禁用/运行中/archived/请求异常均不提示)。
  • Web 单元测试:788 passed / 0 failed / 0 skipped(干净 main 786 + 2 新增)
  • Web typecheck:通过,0 错误;vite build:通过
  • pnpm architecture:check:通过(275 个包源文件);pnpm ci:catalog:check:通过(UT host=9 / guest=1)
  • E2E:CodeArts 会在 MR 上按既有流程运行。已人工核查受影响的既有 mocked journey:journey-provider-model-catalog.spec.ts(含 getByRole("note") 唯一性断言——新提示刻意不占用 role="note",改为专用 class)与 journey-first-run.spec.ts(模型选中文案断言在触发器上,不受弹层提示影响);新增 Toast 为右上角、success 自动消失,不遮挡侧边栏设置入口与弹层内选项/停止按钮。

Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)

likedislike
合并受阻
Hhugoxk
22 天前 关联了issue:[Feature]: 会话内切换模型仅对当前会话生效且无提示,新会话又回到全局默认
atomgit-bot
atomgit-bot
22 天前 评论:

变更摘要

本 PR 针对 Issue #97「会话内切换模型仅对当前会话生效且无提示」的问题,在交互层补充作用域可见性提示,不改动底层配置结构。核心是在 ModelPicker 弹层中加入作用域说明,并在模型切换成功写入后通过 Toast 反馈用户:切换仅对当前会话生效,新会话会回到项目或系统默认模型。为此 updateSessionSettings 的返回值由 void 改为 boolean,由真实写入结果驱动 Toast,避免在禁用、运行中或请求失败时误报成功。同时新增纯函数 modelSwitchNotice 及中英文双语文案。

主要改动

  • 切换器作用域提示:ModelPicker.tsx 在弹层标题下方新增 <p className="model-picker-scope-note">,展示 composer.modelPicker.scopeHint 文案,使用户在选择前即可读到作用域说明。
  • 切换成功 Toast 反馈:App.tsx 中 updateSessionSettings 返回 boolean,模型切换仅在写入成功后调用 modelSwitchNotice 并 pushToast,失败或未写入时不提示。
  • 新增纯函数与类型:model.tsx 新增 ModelSwitchNotice 接口与 modelSwitchNotice(modelName, t) 函数,返回 success 语气及标题/详情文案,并从 App.tsx 导出。
  • 双语文案新增:messages.ts 在 en 与 zhCN 中新增 composer.modelPicker.scopeHint、composer.modelSwitch.title、composer.modelSwitch.detail 三个键。
  • 样式与测试:conversation.css 新增专用类 .model-picker-scope-note;ModelPicker.test.tsx 新增针对 modelSwitchNotice 文案与弹层提示时机(打开前无、打开后出现)的断言。
likedislike
不准确?
atomgit-bot
atomgit-bot
22 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
openJiuwen-bot成员
22 天前 评论:

欢迎来到 openJiuwen 社区

Hey @hugoxk , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。

likedislike
atomgit-bot
atomgit-bot
22 天前 评论:

AtomGit AI 助手使用指南

在 PR 评论中使用命令即可触发。支持在普通评论和代码行评论中使用。

功能 命令 说明
代码审查 /ai review 检查代码质量、潜在问题、安全风险
PR 摘要 /ai summary 生成 PR 变更内容的结构化摘要
代码解释 /ai explain 解释代码变更的逻辑和意图
自由提问 @atomgit-bot <问题> 询问关于本 PR 的任何问题
帮助 /ai help 显示此帮助信息

免责声明

AI 助手可能存在误判,请结合自身判断。可以对评论点 👍 或 👎 帮助我们改进。

likedislike
不准确?
OopenJiuwen-bot成员
22 天前 添加了label:openJiuwen-cla/yes
openJiuwen-bot成员
22 天前 评论:

CLA 签署成功

hugoxk, 感谢您的代码贡献。 所有的代码贡献者都已完成了 CLA 签署。 👍

likedislike
openJiuwen-bot成员
22 天前 评论:

The pipeline(pipeline number:150) is running. Please wait a moment...

likedislike
OopenJiuwen-bot成员
22 天前 添加了label:ci-running
wang_cheng_zhao成员
22 天前 评论:

AI 自动检视,仅供参考,问题都需要人工评估分析.

变更摘要

单提交 185f5641(xuke),对接 Issue #97:会话内模型胶囊看起来像全局设置,实际只写当前 Session 覆盖,新建会话会静默回落到默认模型。本 PR 在不改配置形状的前提下把作用域说清楚——ModelPicker 弹出层增加 composer.modelPicker.scopeHint(样式 .model-picker-scope-note),切换成功后用 Toast 点名模型并说明仅当前会话生效;updateSessionSettings 改为返回是否真正写入,失败/禁用/运行中不弹成功提示。en / zh-CN 三组文案齐全,并抽出纯函数 modelSwitchNotice 与 picker 打开时机的单测。相对 origin/main(fcd96908)ahead 1、behind 0;改动面仅 web composer / i18n / 样式 / ModelPicker 测试,无无关文件。

做法是否合理

路径对症:选模型当下就能读到「仅当前会话」,成功后再用 Toast 复述并指向项目/系统默认设置入口;刻意不做「设为全局默认」快捷入口,与 Issue 增强项延后一致。Toast 用返回值门控,避免 disabled / archived / running / API 失败时误报成功。提示用普通 <p className="model-picker-scope-note">,没有挂 role="note",不会和既有 composer-thinking-notice 的 note 角色抢查询。测试体量与改动匹配:notice 文案双边断言 + 关闭态不渲染、打开后才出现 scope note。

可合

likedislike
Hhugoxk
22 天前 修改了pull request 的描述
openJiuwen-bot成员
22 天前 评论:

✅ 流水线 19f5677b776b45068a33493bbad67ad5 执行成功。

可在 https://gitcode.com/openJiuwen/sciencediscovery/pull/150/check 查看完整构建日志。

在 PR 评论中发送 rerun 可重新触发 CI 流水线。

任务名称子任务状态详情
代码检查SCA(开源合规)PASSED点此跳转
Anti-poison(防投毒)PASSED点此跳转
CodeCheck(静态检查)PASSED点此跳转
Blacklist(禁用词)PASSED点此跳转
UThost tierPASSED公开日志
guest tier (QEMU TCG sandbox)PASSED公开日志
ST-PASSED公开日志
Binaryx86_64 debug packagePASSEDbinary · SHA256SUMS
aarch64 debug packagePASSEDbinary · SHA256SUMS
likedislike
OopenJiuwen-bot成员
22 天前 添加了label:ci-successful
OopenJiuwen-bot成员
22 天前 删除了label:ci-running
Wwang_cheng_zhao成员
3 天前 审查状态已重置,审查人: hong-ye-zhou,yi-zhang95,wang_cheng_zhao