NousResearch/hermes-agent

Ollama Cloud provider integration and model picker fixes

Cluster 10977. Data as of

Nothing open on GitHub. Fix merged in #11066 on 16 Apr 2026. Check it covers your case.

The short answer

0open issues
0open PRs
3items grouped
Known?
Yes. 3 related items grouped here, 1 issue already closed.
Fix event
A fix was merged to main in PR #11066. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this resolved, deciding PR #11066. That is separate from the fix event.
Still open
Nothing open on GitHub.

These issues and pull requests concern adding Ollama Cloud as a built-in provider and fixing bugs where the model picker showed zero models or displayed local models instead of cloud models.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #11066 fix: wire Ollama Cloud into /model TUI picker (0 models regression)

    merged to main

    files: hermes_cli/model_switch.py, hermes_cli/models.py, tests/hermes_cli/test_ollama_cloud_provider.py

    Show the diff
    • hermes_cli/model_switch.py
      @@ -807,6 +807,10 @@ def list_authenticated_providers(
           # "nous" shares OpenRouter's curated list if not separately defined
           if "nous" not in curated:
               curated["nous"] = curated["openrouter"]
      +    # Ollama Cloud uses dynamic discovery (no static curated list)
      +    if "ollama-cloud" not in curated:
      +        from hermes_cli.models import fetch_ollama_cloud_models
      +        curated["ollama-cloud"] = fetch_ollama_cloud_models()
       
           # --- 1. Check Hermes-mapped providers ---
           for hermes_id, mdev_id in PROVIDER_TO_MODELS_DEV.items():
    • hermes_cli/models.py
      @@ -1286,6 +1286,10 @@ def provider_model_ids(provider: Optional[str], *, force_refresh: bool = False)
               live = _fetch_ai_gateway_models()
               if live:
                   return live
      +    if normalized == "ollama-cloud":
      +        live = fetch_ollama_cloud_models(force_refresh=force_refresh)
      +        if live:
      +            return live
           if normalized == "custom":
               base_url = _get_custom_base_url()
               if base_url:
    • tests/hermes_cli/test_ollama_cloud_provider.py
      @@ -114,6 +114,65 @@ def test_provider_label(self):
               assert "ollama-cloud" in _PROVIDER_LABELS
               assert _PROVIDER_LABELS["ollama-cloud"] == "Ollama Cloud"
       
      +    def test_provider_model_ids_returns_dynamic_models(self, tmp_path, monkeypatch):
      +        """provider_model_ids('ollama-cloud') should call fetch_ollama_cloud_models()."""
      +        from hermes_cli.models import provider_model_ids
      +
      +        monkeypatch.setenv("HERMES_HOME", str(tmp_path))
      +        monkeypatch.setenv("OLLAMA_API_KEY", "test-key")
      +
      +        mock_mdev = {
      +            "ollama-cloud": {
      +                "models": {
      +                    "qwen3.5:397b": {"tool_call": True},
      +                    "glm-5": {"tool_call": True},
      +                }
      +            }
      +        }
      +        with patch("hermes_cli.models.fetch_api_models", return_value=["qwen3.5:397b"]), \
      +             patch("agent.models_dev.fetch_models_dev", return_value=mock_mdev):
      +            result = provider_model_ids("ollama-cloud", force_refresh=True)
      +
      +        assert len(result) > 0
      +        assert "qwen3.5:397b" in result
      +
      +
      +# ── Model Picker (list_authenticated_providers) ──
      +
      +class TestOllamaCloudModelPicker:
      +    def test_ollama_cloud_shows_model_count(self, tmp_path, monkeypatch):
      +        """Ollama Cloud should show non-zero model count in provider picker."""
      +        from hermes_cli.model_switch import list_authenticated_providers
      +
      +        monkeypatch.setenv("HERMES_HOME", str(tmp_path))
      +        monkeypatch.setenv("OLLAMA_API_KEY", "test-key")
      +
      +        mock_mdev = {
      +            "ollama-cloud": {
      +                "models": {
      +                    "qwen3.5:397b": {"tool_call": True},
      +                    "glm-5": {"tool_call": True},
      +                }
      +            }
      +        }
      +        with patch("hermes_cli.models.fetch_api_models", return_value=["qwen3.5:397b"]), \
      +             patch("agent.models_dev.fetch_models_dev", return_value=mock_mdev):
      +            providers = list_authenticated_providers(current_provider="ollama-cloud")
      +
      +        ollama = next((p for p in providers if p["slug"] == "ollama-cloud"), None)
      +        assert ollama is not None, "ollama-cloud should appear when OLLAMA_API_KEY is set"
      +        assert ollama["total_models"] > 0, "ollama-cloud should show non-zero model count"
      +
      +    def test_ollama_cloud_not_shown_without_creds(self, monkeypatch):
      +        """Ollama Cloud should not appear without credentials."""
      +        from hermes_cli.model_switch import list_authenticated_providers
      +
      +        monkeypatch.delenv("OLLAMA_API_KEY", raising=False)
      +
      +        providers = list_authenticated_providers(current_provider="openrouter")
      +        ollama = next((p for p in providers if p["slug"] == "ollama-cloud"), None)
      +        assert ollama is None, "ollama-cloud should not appear without OLLAMA_API_KEY"
      +
       
       # ── Merged Model Discovery ──
       

1 PR closed without merging

From the close comments: done elsewhere 1

  • #10964 fix: Ollama Cloud shows 0 models in /model TUI picker · done elsewhere → 5b4773f, #11066, #10977
Closed issues · 1
  • Closed#10977[Bug]: Ollama Cloud shows 0 models in /model TUI picker
How this cluster was grouped
  • Link evidence (structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
  • Pairwise link density 0.67: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. 1.00 means every pair is linked.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Merged PRs
#11066
Closed issues
1
Attempts
1 PR closed without merging
Fix link checked
16 Apr 2026. This confirmation is old and may be out of date (a revert or reopen would not have invalidated it here); re-verify.

For your agent

The same facts, typed.