Settings UI "Models" page only lists adapter-registered configurable providers, hiding llm-pi-ai profile routes #5849
Replies: 1 comment
|
Source-checked on master The code chain (verified):
So a MiniMax profile declared under Two discriminating branches — which one matches?
If you can confirm branch 1 with the add-flow observation + whether the llm-pi-ai section renders, I can map it precisely onto the revert family and give you a today-workaround (validate the MiniMax entry against the pi-ai provider schema — |
Uh oh!
There was an error while loading. Please reload this page.
Summary
When
~/.dsh/settings.yamldeclares providers via two different mechanisms(top-level
llm-deepseekadapter vsllm-pi-ai.providers.*profile routes),the Settings → Models page only surfaces the first one. The chat input
dropdown, however, shows both providers — leaving the user thinking one of
them "doesn't exist" until they expand the dropdown and discover it works.
This is a UX inconsistency: the same model is selectable in chat but absent
from the page that exists to manage credentials and base URLs for it.
Reproduction
Fresh
~/.dsh/settings.yamlwith two providers:Open DSH Desktop → Settings → Models.
Observe: only the DeepSeek card is shown. The MiniMax provider is
absent from this page, with no place to view or edit its baseURL / API key.
Open any chat → model dropdown.
Observe: BOTH DeepSeek and MiniMax sections appear; all 3
models are selectable and the API actually works.
Expected
Settings → Modelsshould show both providers as cards, with edit affordancefor API key and baseURL on each — mirroring the chat dropdown. The user
should not have to expand a chat input to discover a provider that is already
configured in their
settings.yaml.Root cause (observed in source)
packages/llm/llm-deepseek/src/index.tscallsctx.llm.registerConfigurableProviders()with one hardcoded entry:packages/llm/llm-pi-ai/src/index.tsbuilds its list fromcatalogProviderIds()(a closed set in
catalog.ts:openai / deepseek / openrouter / together / baseten / zai / qwen / chat-template / ...) plus profile-declared routes. Auser-declared route like
MiniMaxinllm-pi-ai.providers.MiniMax:becomes aprofile entry, but the Settings UI only iterates the top-level adapter
registration, not the union of adapter-registered + profile-declared routes.
In other words:
Settings → Modelsreads fromregisterConfigurableProviders()results; the chat dropdown reads from
ctx.llm.listProviders()which DOESinclude profile routes. The two views diverge.
Suggested fix
Settings → Modelsshould aggregate fromctx.llm.listProviders()AND theprofile-declared entries from
llm-pi-ai'sdirectoryEntries(), not justregisterConfigurableProviders()results from top-level adapters.This way, every provider that is actually wired to a model — whether it came
from a built-in adapter or from
llm-pi-ai.providers.<name>in the user'sprofile — gets a card in the Models page.
A less invasive fix would be: only render the
llm-pi-aiprofile-declaredentries that have at least one model listed, so a partially-typed user route
does not show up.
Environment
packages/llm/llm/src/index.ts(listProviders()), plusper-adapter
registerConfigurableProviders()calls.dropdown already shows all providers correctly.
All reactions