Replies: 1 comment
|
这份报告的机制全部成立,而且修法比你建议的还要近一步 —— 修复机械已经存在,只是重试按钮没接上。
(基于 0.1.5-rc.2 源码逐行核对。) |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
LlmAdapter.listModels()动态发现模型复现步骤
dsh weblistModels()失败实际结果
点击“重试”后错误依旧存在,第三方模型不会重新出现。必须重启 DSH,或者由插件主动触发
llm/adapters-updated。预期结果
点击“重试”后,应重新调用失败提供方的模型发现逻辑;当服务已经恢复时,模型应正常出现在模型选择器中。
原因分析
Host 端
buildModelCatalog()会捕获单个 provider 的错误,把错误放入failures,但整个共享 catalog 状态仍然变成ready。浏览器端 Retry 处理仅调用
ModelCatalogDirectory.load()。当共享 catalog 已经处于ready状态时,load()会直接返回,因此不会重新请求 Host,也不会重新执行第三方适配器的listModels()。结果是 Retry 按钮对这种 provider failure 实际上是 no-op。
建议修复
Retry 操作不应只调用
load(),而应先使共享模型目录失效,或直接调用公开的强制刷新接口,例如:invalidate()后再load();或者refresh(),强制 Host 重新构建模型目录。如果只希望重试失败的 provider,也可以保留成功 provider 的结果,仅重新调用
failures中对应适配器的模型发现。第三方插件临时规避方案
目前
@bic-ai/dsh-bicbot使用后台指数退避重新探测服务。探测恢复后,通过AdapterRegistrationHandle.replace()触发公开的llm/adapters-updated事件,从而让 DSH 刷新模型目录。这个方案可以让插件自动恢复,但不能真正修复 Retry 按钮;根本修复仍应位于 DSH 的模型目录重试逻辑中。
All reactions