You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
packages/llm/llm-pi-ai/src/catalog.tsresolveRouteModels:「absent models key and an empty one are the same request … both mean 'serve the installed catalog'」——删空精选 ⇒ 暴露内置全量目录,已删模型仍可路由。
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Summary
在设置里删除某个 provider 的精选模型(保留 provider)后,DSH 的模型持久化三层都不做校验:
agent-default-model原地不动:currentSelection()只读 config,无目录校验、无删除级联;agentOptions()把agentDefaultModel.currentSelection()直接作为初始模型;modelSelection投影把{provider, model}折成lastUsed写进会话日志,之后每一轮、每次恢复都复用它。结果是:设置里已经删掉的模型,新会话照用不误,并且持续发出真实计费请求,直到 provider 余额耗尽才报错(一次已知事故:在设置里删掉唯一添加的付费模型后继续使用,新会话沿用该模型真实计费数十步,直到收到 HTTP 402 余额不足
PI_AI_ERROR才停止)。附带问题:把该 provider 的精选模型删空后,
dsh-llm-pi-ai的「models键缺失与为空是同一意图——都表示服务 pi-ai 内置目录」规则生效,该 provider 会一次性暴露内置全量目录(OpenRouter 约 490 个),被删的模型仍在其中、仍然可路由;用户在模型选择器里会看到列表突然暴增。Reproduction
不需要真的花钱即可复现机制:
selectModel会顺带在后台saveSelection,部署默认从此刻起变成 M;request/header即为 M,请求照常发出。真实环境实测中发现的行为不一致(同一「陈旧默认」,两种结局):
UNKNOWN_MODEL/MISSING_CREDENTIAL);取决于目录形状,用户无法预期是哪一种。
Current behavior
代码路径(master
39163dd,2026-11-13 核对;与 0.2.1-rc.5 逐条比对语义一致,git log 无相关修复):packages/core/agent-default-model/src/index.ts:currentSelection()只读 config;saveSelection写 profile 配置;设置里删模型不触动它;packages/api/session-controller/src/agent.tsagentOptions():把agentDefaultModel.currentSelection()直接作为新会话初始模型(新版改为惰性 getter,「无记录/无请求的会话跟随默认变化」,仍无目录校验);packages/api/session-controller/src/commands.tsselectModel:requireModel(modelAvailable)通过后agent.model.select追加耐久的model/selection事件,并在后台saveSelection——这就是一次显式选择把部署默认改掉的机制;packages/api/session-controller/src/agent.tsselectionFor:有记录的选择 ⇒ 用记录;否则有请求头 ⇒ 用请求头里的 provider/model;都没有才回落默认。设置里删模型不会改这些记录;packages/llm/llm-pi-ai/src/catalog.tsresolveRouteModels:「absent models key and an empty one are the same request … both mean 'serve the installed catalog'」——删空精选 ⇒ 暴露内置全量目录,已删模型仍可路由。取证方式(供复现核对):会话日志
~/.dsh/sessions/<workspace>/<session-id>/session.v4.jsonl.zstd(zstd -dc解压)里的request/header记录每轮实际使用的 provider/model;~/.dsh/storages/session_projcache/sessions/<id>.json的record.rows.modelSelection.val.lastUsed记录会话的有效模型;profile 的cordis.patch.yml里agent-default-model与llm-pi-ai两节反映配置现状。已知事故(已脱敏):在设置里删掉唯一添加的付费模型后继续使用,新会话沿用该模型真实计费数十步,直到 provider 返回 402 余额不足(
PI_AI_ERROR)才停止;同时模型选择器列出了数百个模型。Expected behavior
agent-default-model:当前默认的模型被删时,UI 明确警告并回退到首个可用模型(或清空),最低要求是不要用目录无法提供的默认给新会话 seeding;selectModel后台保存默认时,若原默认已失效应一并处理或告警。Environment
39163dd(2026-11-13)均存在;All reactions