Before filing
Closest existing issue
#154 (closed, fixed in #163). While #154 addressed preventing an empty refresh from wiping existing cache entries, it did not address why OpenRouter returns an empty list in the first place.
What's broken
Models for the OpenRouter provider never appear in Berd's model picker, even when OpenRouter is configured with a valid API key and active in Goose.
Berd populates the model picker via fetchProviderSupportedModels (src/features/providers/stores/providerModelCacheStore.ts), calling the backend ACP method _goose/unstable/providers/supported-models/list (GooseUnstableProvidersSupportedModelsList). In goosed (crates/goose/src/acp/server/providers.rs), this ACP call delegates to provider.fetch_supported_models().
However, in aaif-goose/goose:
crates/goose-provider-types/src/base.rs provides a default implementation for fetch_supported_models that returns Ok(vec![]).
crates/goose-providers/src/openrouter.rs implements fetch_recommended_models (which calls OpenRouter's /api/v1/models and filters for tool support), but does not implement fetch_supported_models.
As a result, _goose/unstable/providers/supported-models/list for openrouter always returns {"models": []}. Because no models are ever returned, the model picker remains completely empty for OpenRouter.
Steps to reproduce
- Launch Berd.
- Configure OpenRouter as the provider for Goose with a valid API key and a model (e.g.
google/gemini-3.8-flash or anthropic/claude-sonnet-4.5).
- Open a chat and verify that Goose functions with OpenRouter.
- Open the model picker for Goose in Berd.
- Search or browse for OpenRouter models.
What you expected to happen
OpenRouter models supported by Goose (or returned by OpenRouter) appear in the model picker.
What actually happened
Zero OpenRouter models are listed in the picker. Inspecting localStorage (goose:providerModelCache:v1) confirms openrouter has an empty models array: {"providerId":"openrouter","models":[],"fetchedAt":...}. Direct ACP queries to _goose/unstable/providers/supported-models/list with {"providerId": "openrouter"} also return {"models": []}.
How often does it happen?
Every time — reliably reproducible
Berd version
0.6.2 (and verified upstream code against latest 0.6.3 / main)
Operating system
macOS (Apple Silicon)
Model and provider
Goose agent, OpenRouter provider (e.g. google/gemini-3.8-flash or any OpenRouter model)
Relevant log output
Direct query to bundled goosed via ACP:
Request:
{"jsonrpc":"2.0","id":1,"method":"_goose/unstable/providers/supported-models/list","params":{"providerId":"openrouter"}}
Response:
{"jsonrpc":"2.0","id":1,"result":{"models":[],"providerId":"openrouter"}}
Local storage cache entry in Berd's WebKit database (localstorage.sqlite3):
{"providerId":"openrouter","models":[],"fetchedAt":1788805485945}
Screenshots, recordings, or other context
Upstream code pointers in aaif-goose/goose:
crates/goose-providers/src/openrouter.rs: implements fetch_recommended_models using OpenRouter /api/v1/models, but does not implement fetch_supported_models.
crates/goose-provider-types/src/base.rs:
async fn fetch_supported_models(&self) -> Result<Vec<String>, ProviderError> {
Ok(vec![])
}
crates/goose/src/acp/server/providers.rs:
pub(super) async fn on_list_provider_supported_models(
&self,
req: ProviderSupportedModelsListRequest,
) -> Result<ProviderSupportedModelsListResponse, agent_client_protocol::Error> {
let provider = self
.create_provider(&req.provider_id, Vec::new(), None, true)
.await
.internal_err_ctx("Failed to initialize provider")?;
let models = match provider.fetch_supported_models().await {
...
Before filing
Closest existing issue
#154 (closed, fixed in #163). While #154 addressed preventing an empty refresh from wiping existing cache entries, it did not address why OpenRouter returns an empty list in the first place.
What's broken
Models for the OpenRouter provider never appear in Berd's model picker, even when OpenRouter is configured with a valid API key and active in Goose.
Berd populates the model picker via
fetchProviderSupportedModels(src/features/providers/stores/providerModelCacheStore.ts), calling the backend ACP method_goose/unstable/providers/supported-models/list(GooseUnstableProvidersSupportedModelsList). Ingoosed(crates/goose/src/acp/server/providers.rs), this ACP call delegates toprovider.fetch_supported_models().However, in
aaif-goose/goose:crates/goose-provider-types/src/base.rsprovides a default implementation forfetch_supported_modelsthat returnsOk(vec![]).crates/goose-providers/src/openrouter.rsimplementsfetch_recommended_models(which calls OpenRouter's/api/v1/modelsand filters for tool support), but does not implementfetch_supported_models.As a result,
_goose/unstable/providers/supported-models/listforopenrouteralways returns{"models": []}. Because no models are ever returned, the model picker remains completely empty for OpenRouter.Steps to reproduce
google/gemini-3.8-flashoranthropic/claude-sonnet-4.5).What you expected to happen
OpenRouter models supported by Goose (or returned by OpenRouter) appear in the model picker.
What actually happened
Zero OpenRouter models are listed in the picker. Inspecting
localStorage(goose:providerModelCache:v1) confirmsopenrouterhas an empty models array:{"providerId":"openrouter","models":[],"fetchedAt":...}. Direct ACP queries to_goose/unstable/providers/supported-models/listwith{"providerId": "openrouter"}also return{"models": []}.How often does it happen?
Every time — reliably reproducible
Berd version
0.6.2 (and verified upstream code against latest 0.6.3 / main)
Operating system
macOS (Apple Silicon)
Model and provider
Goose agent, OpenRouter provider (e.g.
google/gemini-3.8-flashor any OpenRouter model)Relevant log output
Direct query to bundled
goosedvia ACP:Local storage cache entry in Berd's WebKit database (
localstorage.sqlite3):{"providerId":"openrouter","models":[],"fetchedAt":1788805485945}Screenshots, recordings, or other context
Upstream code pointers in
aaif-goose/goose:crates/goose-providers/src/openrouter.rs: implementsfetch_recommended_modelsusing OpenRouter/api/v1/models, but does not implementfetch_supported_models.crates/goose-provider-types/src/base.rs:crates/goose/src/acp/server/providers.rs: