Skip to content

Model catalog empty for API-key providers (Google AI, OpenRouter); auto-routing bypasses connected providers; contradictory provider status #9702

Description

@tobiasdd-star

Environment

  • OmniRoute version: 3.8.49 (npm global install)
  • OS: macOS (Darwin)
  • Node: v26.4.0
  • npm: 11.17.0
  • Providers connected: Google AI (google, api-key) and OpenRouter (openrouter, api-key), both added via omniroute setup --add-provider interactive wizard

Summary

After connecting two API-key providers (Google AI, OpenRouter), the model catalog for both stays empty/placeholder-only in both the CLI and the dashboard's Combo Studio, which blocks building a priority routing combo entirely. Separately, model: "auto" silently routes to a free-tier provider instead of the connected paid providers, and provider status endpoints return contradictory results depending on which command is used.

Steps to Reproduce

  1. npm install -g omniroute, omniroute serve
  2. omniroute setup --add-provider → add Google AI (api-key) → succeeds ("✓ Provider configured: Google AI")
  3. Repeat for OpenRouter (api-key) → succeeds
  4. omniroute providers list → both show up
  5. omniroute providers test-all → both report OK ... provider test passed
  6. omniroute models google"No models found."
  7. omniroute models openrouter → only returns a single placeholder row, Auto (Best Available), no real models
  8. Dashboard → Combinations ("Kombinationen") → Create Combo → Steps → select Provider googleModel dropdown never populates, stays on "Select model" — impossible to add a step, impossible to build a priority combo
  9. omniroute providers status (and --output json) → No provider connection data available. / {"count":0,"connections":[]}contradicts providers list (2 connections) and providers test-all (both OK) run moments earlier
  10. omniroute restart (and a full manual process kill + omniroute serve restart) → no change in any of the above

Additional finding — auto-routing bypasses connected providers

Sending a real request:

curl http://localhost:20128/v1/chat/completions -d '{"model":"auto","messages":[{"role":"user","content":"..."}]}'

returned a successful response, but response headers showed x-omniroute-provider: felo, x-omniroute-model: felo-chat — i.e. auto routed to the free "Felo" provider instead of either connected (paid) provider, silently, with no indication this would happen.

Additional finding — direct model addressing resolves to unrelated third-party relays

Trying to address Google directly by ID to work around the broken dropdown:

  • model: "google/gemini-2.5-pro"{"error":{"message":"No active credentials for provider: vercel-ai-gateway", ...}}
  • model: "google/gemini-2.5-flash"{"error":{"message":"No active credentials for provider: api-airforce", ...}}
  • model: "gemini-2.5-pro" (no prefix) → {"error":{"message":"Ambiguous model 'gemini-2.5-pro'. Use provider/model prefix (ex: in-ai/gemini-2.5-pro or t3chat/gemini-2.5-pro)", ...}}

None of the suggested/resolved prefixes (vercel-ai-gateway, api-airforce, in-ai, t3chat) correspond to the google or openrouter connections that were actually configured. It's unclear whether these are unrelated free-tier catalog entries that happen to share a model name, or whether the catalog is meant to disambiguate this better. Either way, there's no discoverable way to address the specific, connected google/openrouter provider by model ID once the dashboard dropdown is broken.

Expected Behavior

  • omniroute models <provider> should list the real models available for a successfully-tested provider connection.
  • The Combo Studio model dropdown should populate for any provider that passes providers test.
  • providers status should not contradict providers list/providers test-all run at the same point in time.
  • auto routing should not silently prefer an unconnected free-tier provider over explicitly connected, tested, paid providers without clear documentation/control over that precedence.

Also noticed (possibly related, lower priority)

CLI write operations (e.g. omniroute compression configure --engine none) return 401 even with a freshly created, non-expired CLI access token (Zugriffstoken) exported as OMNIROUTE_API_KEY — tested with two separately generated tokens, same result both times. Unclear whether restricted CLI tokens are simply not permitted to write config, and if so this isn't documented anywhere I could find in the shipped npm package (the docs/ folder referenced throughout the README is not included in the npm package).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions