block / block/buzz

OpenRouter provider returns 0 supported models, leaving Goose stuck in needs_setup

Open
#6,308 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Rust
Stars
32.7k
Forks
4.3k
Avg merge
1d 13h
Merged PRs (30d)
253

Description

Title

OpenRouter provider returns 0 supported models, leaving Goose stuck in needs_setup

Summary

In Berd 0.6.3-dev.15+g977d35fc, using Goose with OpenRouter in a BYO-key build, OpenRouter can be successfully configured and authenticated, but Goose remains not_ready because the default provider/model selection flow cannot load supported models.

The issue appears to originate in the pinned Goose backend: OpenRouterProvider implements fetch_recommended_models() but does not implement fetch_supported_models(). The default trait implementation returns an empty vector, so Berd receives zero models from:

_goose/unstable/providers/supported-models/list

As a result, Berd cannot persist the default providerId + modelId, readiness stays needs_setup, and selecting Goose from the model picker redirects back to provider settings.

Environment

* Berd: 0.6.3-dev.15+g977d35fc
* Platform: macOS
* Architecture: Apple Silicon
* Build profile: BYO-key providers enabled
* Harness: Goose
* Model provider: OpenRouter
* Goose commit pinned by Berd: 063694cf7

Actual behavior

OpenRouter is configured successfully:

* API key stored
* provider reports configured=true
* UI shows OpenRouter as connected

However:

defaults/read
→ { providerId: null, modelId: null }

and:

DefaultProviderReadiness
→ { status: "needs_setup", reason: "missing_defaults" }

Runtime ACP calls show:

providers/list
→ openrouter: 335 models

but:

providers/supported-models/list { providerId: "openrouter" }
→ models: []

No backend error is returned; the list is simply empty.

Expected behavior

After configuring OpenRouter, Berd should:

1. retrieve supported OpenRouter models;
2. select/persist a valid default model;
3. update Goose readiness to ready;
4. allow Goose to be selected from the model picker;
5. show OpenRouter models in the model selector.

Root cause

The ACP endpoint for supported models calls:

provider.fetch_supported_models()

For OpenRouter, fetch_supported_models() is not overridden.

OpenRouterProvider only overrides:

fetch_recommended_models()

The default Provider trait implementation of fetch_supported_models() returns:

Ok(vec![])

Therefore the two model-discovery paths diverge:

providers/list
→ fetch_recommended_models()
→ 335 OpenRouter models

versus:

providers/supported-models/list
→ fetch_supported_models()
→ []

This propagates into Berd:

providerModelCacheStore
→ fetchProviderSupportedModels("openrouter")
→ []

then:

saveDefaultProviderSelection()
→ models.length === 0
→ "Could not load models for provider"

The error is caught in the frontend and the default model is never persisted.

Relevant files

Goose:

goose/src/acp/server/providers.rs
goose/src/providers/openrouter.rs
goose-provider-types/src/base.rs

Berd:

src/features/providers/defaultProviderConfig.ts
src/features/providers/defaultProviderReadiness.ts
src/features/providers/hooks/useCredentials.ts
src/features/providers/hooks/useAgentProviderStatus.ts
src/features/chat/ui/AgentModelPicker.tsx

Workaround confirmed

Manually saving valid defaults unblocks Goose:

providerId: openrouter
modelId: deepseek/deepseek-v4-flash

After saving:

defaults/read
→ {
providerId: "openrouter",
modelId: "deepseek/deepseek-v4-flash"
}

and readiness becomes:

ready

Goose then works correctly with OpenRouter and can access local tools/files.

However, the model selector still cannot enumerate OpenRouter models because supported-models/list remains empty.

Suggested fix

Implement fetch_supported_models() in OpenRouterProvider, ideally reusing the same OpenRouter models endpoint / helper used by fetch_recommended_models().

Alternatively, Berd could temporarily fall back to the models already returned by providers/list when supported-models/list returns an empty list.

The backend fix seems preferable because the ACP endpoint itself currently reports an incorrect empty supported-model list for OpenRouter.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.