Repository navigation
Web UI 增删模型 provider 必失败:dsh: profile reload requires the root Include entry(0.2.1-rc.2) #10282
Replies: 4 comments 3 replies
|
定位是对的,但我想把"web 启动路径查不到条目"这句话换成更准确的机制:这不是哪个启动路径漏写了一次,而是这个表的键就是那个 Context 对象本身。
const bootstrapIncludes = new WeakMap<Context, Entry>()
WeakMap 的键是对象身份。任何用别的 context 调进来的重载都会 miss: 抛点也确实在任何补丁写入之前: 修法我建议不要继续用 ctx 当键。根 Include 的 id 是固定的 const entry = bootstrapIncludes.get(ctx)
?? ctx.loader.entries().find(row => row.options?.id === 'include')或者更干净一点,把 entry 挂在 loader 上而不是挂在某个 ctx 上,让"根 Include 是谁"成为进程级事实而不是上下文级事实。 一条边界:我没有你的 profile 和那台机器,无法证明 web 那次重载传进去的到底是哪个 ctx。我能确认的是键是对象身份、写入只有一处、抛点在写盘之前。这三点已经足以说明"同一个进程里换个 ctx 调用就必失败",也足以解释为什么这件事和 provider 配置本身无关。 |
|
运行 |
|
我 dsh-web 运行环境是在 ubuntu 上的,路径是~/.npm-global/bin/dsh |
Uh oh!
There was an error while loading. Please reload this page.
环境
@deepseek-ai/dsh,用户级前缀安装)web,启动命令dsh web --no-open --host 127.0.0.1 --port 19387 --trusted-host 10.10.10.105:19388socat转发到局域网地址供浏览器访问(反向代理/端口转发场景)现象
在 Web 界面「设置 → 模型」里删除(或新增)一个 provider,确认后弹窗报错:
操作没有落盘:
~/.dsh/profiles/web/cordis.patch.yml的修改时间保持不变,等于 UI 操作是空操作,只留一条难以理解的报错。复现步骤
dsh web --no-open --host 127.0.0.1 --port 19387cordis.patch.yml的llm-pi-ai→config.providers下配置至少一个 provider期望:provider 被移除并热重载。
实际:报
profile reload requires the root Include entry,配置文件无任何变化。根因分析(阅读随包源码)
@deepseek-ai/dsh-app-boot的recompose():bootstrapIncludes是模块私有的WeakMap,只在创建根cordis:include条目的引导函数里写入:从 Web UI 触发的 profile 重载,其运行上下文在这个 WeakMap 里查不到条目,因此在写入任何配置之前就抛错。推测是
dsh web的启动路径没有走上述引导函数,或者 UI 编辑所用的ctx与登记时的不是同一个。临时绕行(已验证可用)
绕过 UI,直接改补丁层后重启宿主:
建议
All reactions