Repository navigation
Replies: 1 comment
|
Your One thing I would correct, because it changes how urgent the gap is. "Absent from the picker" is So an id that is not in the bundle is not unpickable-and-maybe-usable, it is unusable: a session Of your three suggestions,
then mount
It changes nothing — no configuration written, no file under |
Uh oh!
There was an error while loading. Please reload this page.
Provider model lists go stale, and the only cure is editing
node_modulesPackage:
@earendil-works/pi-ai(vendored bydsh-llm-pi-ai, pinned^0.85.1)Observed:
dsh 0.1.7-rc.2→0.2.0-rc.1,pi-ai 0.85.1→0.87.1What happens
The model picker shows a list that does not match the provider. New models are absent with no
error, so it looks authoritative and is not.
The only way to correct it is to edit the catalog inside the dsh package's own
node_modules(
@earendil-works/pi-ai/dist/providers/data/opencode-go.json). That file belongs to npm, notthe profile, so a
dshupdate replaces the tree and the correction is silently reverted.Not profile-configurable
The route sets only
apiKeyEnv. It cannot express the list either:resolveEntryresolvesapi = request.api ?? base?.api ?? routeApi, so a route-levelapioverrides the catalog forevery model — and this provider is mixed-protocol. A profile
models:block breaks theother protocols. Today: edit
node_modules(erased each update) or~/.no-auto(forfeits allupdates).
Measured today
opencode-goopenrouteropencode-gois in sync at 0.87.1 by luck: it was 27 at 0.85.1 against a live 30,including a missing
deepseek-v4.1-flash.openrouteris clearer — 80 live models areunpickable, 6 bundled ones are dead, and its endpoint needs no key:
The part that makes this a bug
pi-ai already has the machinery for a live catalog, and it is unused.
dist/models.jsimplements the whole refresh path:createProvider({ refreshModels, filterModels })(~468),runProviderRefreshPhase()callingprovider.refreshModels({ credential, stored, publish, allowNetwork, force, signal })(~125),refresh()selectingevery provider with that hook (~141), and
getAvailable()applyingprovider.filterModels?.(models, credential)(~271).But no shipped provider defines either hook —
grep -rln 'fetchModels:' dist/providers/*.jsreturns nothing — and the harness never calls
refresh():dsh-llm-pi-ai/lib/index.jsimportsonly
builtinModels, builtinProviders, getBuiltinModels, getBuiltinProviders. Plumbing builton one side, never connected on the other.
What I would suggest
Wire it up. Give catalog providers a
fetchModelsand callrefresh():filterModelsearns its keep onopencode-go: public vs key-filtered differ — 42 public vs35 with the org key — and listed-but-unentitled models answer
400 Model is unavailable.Two gaps I cannot settle from outside:
/modelsreturns only{ id, object, created, owned_by }; context window,cost and reasoning options live in pi-ai's bundle or
models.dev/api.json. A refresh needs amerge policy for live models with no metadata anywhere — guessing limits is worse than
omitting a model.
anthropic-messages,openai-completionsoropenai-responses. I derived it by calibrating against the 27shipped models; it held, but the provider should say so.
Or, if a live refresh is out of scope: track pi-ai releases more eagerly (0.87.1 has 30
models to 0.85.1's 27 — no new code needed), and at minimum surface the model count and
catalog date in the picker or
dsh doctor, so "this model does not exist" is distinguishablefrom "my list is old". Today they are indistinguishable.
Why I am reporting it
dshauto-updated and revertedopencode-gofrom a hand-corrected 35 to 27, removing themodel the session was configured to use. Reinstalling pi-ai 0.87.1 fixed it; the next update
will revert that too. I do not expect the profile to carry a model list — only that the
catalog not be a build artifacts that only a `node_modules edit can correct.
All reactions