AGC 模型目录改为启动期从上游同步,退役写死的 gpt-6-astra/luna 与别名(#506) #507
Reference in New Issue
Block a user
Delete Branch "enhance/default-model"
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 平台模型目录在数据库里没有配置时,
read_agc_model_catalog会兜底返回写死的初始目录(质量 → gpt-6-astra、快速 → gpt-5.6-luna)。这两个模型已从上游 Router 移除,于是从未配置过目录的环境(新库、清库、本地调试)会把两个不存在的模型下发给客户端,选中后上游model_not_found,必须人工在后台保存一次目录才恢复。关 issue:#506
方案(只改“初始值从哪来”,保持既有格式与契约不变)
GET {控制面}/api/pricing?group=taonier(公开只读、不带凭据),按data[].model_name排序生成目录:modelId与alias用上游原名(不再填“高质量/快速”),id用模型名 slug(glm-5.3→glm-5-3,冲突追加-2),全部 enabled,默认项取排序后第一项,并以存量 revision 写回自增。GET /api/llm/models、POST /api/llm/responses、/api/llm/chat/completions与后台GET/PUT /admin/api/agc-models返回503“模型目录未初始化”,不回退任何内置模型名。恢复路径:修好上游可达性后重启,或运维清空该行后重启。id/alias/modelId/defaultModelId)、后台页面与 admin DTO、GET /api/llm/models形状、客户端select_game_creator_model的标识校验全部保持原样 ——id用 slug 正是为了让已发布客户端的[A-Za-z0-9_-]校验继续成立,客户端不需要发版。gpt-6-astra默认值改为platform-default;模型弹层去掉滚动条并按最长模型名自动拓宽。验证证据
cargo test -p module-runtime --lib agc_models::cargo test -p api-server --bin api-server agc/llm::cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bins configuration::cargo fmt --all -- --check(两套 workspace)+ prettier + eslintnpm run check:encoding/check:doc-index/git diff --check已按上游模型列表初始化 AGC 模型目录 revision=1 model_count=6;落库为原格式{id: "glm-5-3", alias: "glm-5.3", modelId: "glm-5.3", enabled: true}、defaultModelId: "deepseek-flash"GET /api/llm/modelsid是 slug、displayName是上游原名(glm-5.3/qwen3.8-flash…),6/6 个id满足客户端[A-Za-z0-9_-]{1,64}校验,defaultModelId=deepseek-flash,revision=1上游不可达/非 2xx/空列表的失败关闭由单测覆盖(
fetch_upstream_model_names_fails_closed_when_upstream_unavailable_or_empty:401/500/空列表),并且本轮改动前的迭代里在真实 Router 上实测过同一条链路(401 → 启动 error → 接口 503 → 目录保持未初始化、不写替代目录)。待确认
qwen-image-3.0(图像模型),是否对 AGC 隐藏由 owner 在后台停用;目录只在未初始化时重建,不会自动跟随上游变化。deepseek-flash),要指定别的默认模型在后台「AGC 模型」页改即可。quality/fast)结构合法时不会自动重建,需要 owner 在后台改掉或清空该行后重启。上游来源修正(2026-09-24 真机实测后)
在本地 dev 栈 + 真实 Router 上试跑发现最初设想的来源走不通,已按实测结论改口径:
GET {Router}/v1/models+ 管理 tokenGET {Router}/api/models/(管理面模型注册表)gpt-6-astra/gpt-6-luna/gpt-6-sol等endpoints为空、已下线无路由绑定的条目GET {Router}/api/pricing?group=taonier(分组定价列表,公开只读)同时修掉一个实测出来的缺陷:定价列表返回顺序每次都可能不同,原“默认项取首个”会导致默认模型随机漂移;现改为按模型名字典序去重排序后建目录,目录内容只取决于模型集合(同一集合重复同步得到完全一致的目录与默认项)。
真实上游验收(本地 dev DB
xushi-p4wfr)agc_model_catalog→ 启动 api-server:日志已按上游模型列表初始化 AGC 模型目录 revision=1 model_count=6;{"revision":1,"defaultModel":"deepseek-flash","models":[deepseek-flash, deepseek-v4-pro, glm-5.3, glm-5.3-flash, qwen-image-3.0, qwen3.8-flash]};GET /api/llm/models→ 200,id/displayName就是上游原名,defaultModelId=deepseek-flash;未带鉴权 401;待确认
qwen-image-3.0(图像模型),是否要在 AGC 下拉隐藏 → owner 可在后台「AGC 模型」停用;目录只在未初始化时重建,不会自动跟随上游变化。deepseek-flash);如需指定别的默认模型,后台「AGC 模型」页可直接改。UI 修正:模型弹层去掉滚动条并按最长模型名自动拓宽
目录项现在直接是上游原始模型名(
deepseek-v4-pro这类),旧弹层规则会把它截断并出现滚动条:min-width: 150px; max-width: 190px; max-height: min(240px, 40vh); overflow: autowidth: max-content; min-width: 150px; max-width: calc(100vw - 24px),去掉max-height/overflow,菜单按目录项展开真实 Chromium 验证(一次性 Vite 夹具挂真实组件 +
styles.css,目录用真实上游 6 个模型名 mock;桌面 1280 与移动 390 视口):两种视口下弹层都完整落在屏幕内。前端 29 passed(
conversationModelSelect.test.tsx)、typecheck 3/3、encoding / diff / prettier 通过;一次性夹具与截图已删除。已知取舍:弹层高度跟随目录项数展开(当前上游在售 6 个),若目录规模大幅增长需要重新评估是否保留滚动兜底;输入框里的触发器仍保留 180px 上限的省略号行为(窄布局约束)。
19af64757eto8514f1094c