优化AGC客户端同步LLM配置 #306
Reference in New Issue
Block a user
Delete Branch "feat/agc-client-sync-llm-config"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
后台在「AGC 模型」页发布新配置后,客户端必须手动刷新(或重启)才能看到最新目录:
GET /api/llm/models只返回models与defaultModelId,缺少可比较的版本标识;客户端只在组件挂载或手动点「刷新模型列表」时拉取。本 PR 按 Issue #292 的方案 A 落地「revision 契约 + 条件刷新」。Closes #292
改动内容
后端
shared-contracts:LlmModelsResponse增加revision。api-server:public_model_catalog透出revision,过滤与脱敏语义不变(仍不返回实际模型名)。gpt-实际模型名。AGC 客户端
clientApi:loadClientLlmModels返回类型补revision。services/llmModelCatalog.ts:目录缓存 + 在途请求去重(同一时刻只发一个请求,重复触发复用同一结果),失败保留上一次成功目录。ConversationModelSelect:项目切换 / 表面挂载 / 下拉展开 / 窗口聚焦条件刷新,revision 未变不更新界面;停用或删除的所选模型回退默认并提示;刷新失败不清空有效选择;刷新结果不覆盖刚完成的选择、也不清除保存失败提示。ProjectSupervisorView:提交前用同一份目录快照再校验一次,失效则回退默认后继续发送,默认也不可用才拦截。selectedModelIsDefault:当前选择是否来自平台默认项。后台默认项变化时,跟随默认项的选择自动切换并提示;用户手动选择后不再被默认项变化覆盖;所选模型失效回退默认时重新标记为默认项。验证
npm run test -- apps/ai-game-creator-shell/tests/conversationModelSelect.test.tsx→ 9/9npm run test -- apps/ai-game-creator-shell/tests/appSurface.test.ts→ 384/384npm run ai-game-creator-shell:typecheck通过cargo test --manifest-path server-rs/Cargo.toml -p api-server model_catalog_tests→ 1/1cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml model_selection_default_flag_round_trips→ 1/1(src-tauri 全量测试通过)npm run check:rustfmt、npm run check:encoding(4326 文件)、git diff --check、prettier/eslint 定向检查通过影响范围与注意事项
/api/llm/models仅新增revision,兼容新增;客户端配置仅新增可选字段selectedModelIsDefault,旧配置缺省按「非默认项」处理。未触及/api/external/v1,无需改 OpenAPI。@lhk229 已按复核意见补齐 P3 的异常 revision 用例(d9c883675):
P2 的职责拆分不在本 PR 处理,已记为后续项(抽 useLlmModelCatalogSelection hook,或把目录/选择状态机下沉到 services/llmModelCatalog.ts),避免在已复核的 PR 里做结构性重构。
本地验证:conversationModelSelect 19/19、appSurface 386/386、AGC typecheck、prettier/eslint、check:encoding、git diff --check 通过。CI 的 Backend tests / Native shell tests 仍停在 runner 拉 crates.io 依赖失败(CONNECT tunnel 502),非代码问题。