Add Ollama Cloud provider

Configure Ollama Cloud as an OpenAI-compatible chat provider with the hosted API base and model listing endpoint.\n\nAdd a focused provider config test so the integration stays key-required and keeps the expected /models endpoint.

Alessandro committed May 9, 2026 at 06:46 UTC 0395778fd7273ca48d100c29fe6960479eb1390e
2 files changed +21
conf/model_providers.yaml
+7
@@ -100,6 +100,13 @@ chat:
100 endpoint_url: "/api/tags"
101 format: "ollama"
102 default_base: "http://host.docker.internal:11434"
103 + ollama_cloud:
104 + name: Ollama Cloud
105 + litellm_provider: openai
106 + models_list:
107 + endpoint_url: "/models"
108 + kwargs:
109 + api_base: https://ollama.com/v1
110 openai:
111 name: OpenAI
112 litellm_provider: openai
tests/test_model_config_api_keys.py
+14
@@ -12,6 +12,7 @@ if str(PROJECT_ROOT) not in sys.path:
12 sys.path.insert(0, str(PROJECT_ROOT))
13
14 sys.modules["giturlparse"] = types.SimpleNamespace(parse=lambda *args, **kwargs: None)
15 +sys.modules["whisper"] = types.SimpleNamespace(load_model=lambda *args, **kwargs: None)
16
17
18 class _DummyObserver:
@@ -115,3 +116,16 @@ def test_model_config_frontend_tracks_inline_api_key_edits():
116 assert '@input="$store.modelConfig.setApiKeyValue(_prov, $el.value)"' in config_content
117 assert "persistAllDirtyApiKeys()" in modal_content
118 assert "$store.modelConfig.resetApiKeyDrafts();" in modal_content
119 +
120 +
121 +def test_ollama_cloud_provider_config_requires_key_and_base_url():
122 + import yaml
123 +
124 + provider_path = PROJECT_ROOT / "conf/model_providers.yaml"
125 + provider_config = yaml.safe_load(provider_path.read_text(encoding="utf-8"))
126 + ollama_cloud = provider_config["chat"]["ollama_cloud"]
127 +
128 + assert ollama_cloud["name"] == "Ollama Cloud"
129 + assert ollama_cloud["kwargs"]["api_base"] == "https://ollama.com/v1"
130 + assert ollama_cloud["models_list"]["endpoint_url"] == "/models"
131 + assert "api_key_mode" not in ollama_cloud