Skip to content

Enable model discovery (Fetch models) for the Ollama BYOK provider #6077

Description

@dpeterson01

What problem are you trying to solve?

Running Open Design against a local Ollama server (BYOK → Ollama provider pointed at a local endpoint), the Fetch models button is disabled and model discovery returns an unsupported_ollama result. I can't auto-populate the models I actually have installed, so I have to know and type each model id by hand.

Every other supported protocol (OpenAI, Anthropic, Google, AIHubMix, SenseAudio) can fetch its catalogue. Ollama is the one gap, even though it exposes a discovery endpoint (GET /api/tags) that lists locally-pulled models. So the capability exists on the provider side; the daemon just doesn't call it.

Related: I opened #6076, which lets you at least type a custom model id in the onboarding BYOK picker. Discovery would remove the guesswork entirely.

Describe the solution you'd like

Wire up the daemon's provider-model discovery for the ollama protocol in apps/daemon/src/integrations/provider-models.ts:

  • providerModelsUrl: GET {baseUrl}/api/tags
  • an extractOllamaModels parser for the { models: [{ name, ... }] } response shape → { id, label }
  • headers: none needed for local Ollama (unauthenticated); optional bearer if a key is supplied

Then remove the apiProtocol === 'ollama' short-circuits in the front-end gates (EntryShell.tsx, SettingsDialog.tsx, InlineModelSwitcher.tsx, AvatarMenu.tsx) so Fetch models lights up and populates the installed models.

Design question I'd like to settle before coding

The protocol is labeled "Ollama Cloud" and defaults to ollama.com, but /api/tags is a local Ollama endpoint. I suspect discovery was stubbed on purpose because the cloud endpoint behaves differently. Before writing a PR I'd like to agree on the boundary:

  • Option A: only attempt /api/tags when the base URL is a loopback/local host, and keep the current "not available" message for genuine cloud endpoints.
  • Option B: always attempt it and let it fail gracefully for cloud.

I lean toward A. It respects what looks like a deliberate choice and avoids confusing people who really are pointed at the cloud. Does that match your intent, or is there a reason discovery was left off that I'm missing?

Alternatives you've considered

Additional context

Related PR: #6076 (custom model entry in the onboarding BYOK picker).

Would you be willing to contribute a PR?

Yes, with guidance from a maintainer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions