diff --git a/frigate/genai/llama_cpp.py b/frigate/genai/llama_cpp.py index 51e8d160d2..e5e9883b8f 100644 --- a/frigate/genai/llama_cpp.py +++ b/frigate/genai/llama_cpp.py @@ -238,10 +238,15 @@ class LlamaCppClient(GenAIClient): def list_models(self) -> list[str]: """Return available model IDs from the llama.cpp server.""" - if self.provider is None: + base_url = self.provider or ( + self.genai_config.base_url.rstrip("/") + if self.genai_config.base_url + else None + ) + if base_url is None: return [] try: - response = requests.get(f"{self.provider}/v1/models", timeout=10) + response = requests.get(f"{base_url}/v1/models", timeout=10) response.raise_for_status() models = [] for m in response.json().get("data", []): diff --git a/frigate/genai/ollama.py b/frigate/genai/ollama.py index 7315b6e39b..7524d54e38 100644 --- a/frigate/genai/ollama.py +++ b/frigate/genai/ollama.py @@ -134,10 +134,20 @@ class OllamaClient(GenAIClient): def list_models(self) -> list[str]: """Return available model names from the Ollama server.""" - if self.provider is None: - return [] + client = self.provider + if client is None: + # Provider init may have failed due to invalid model, but we can + # still list available models with a fresh client. + if not self.genai_config.base_url: + return [] + try: + client = ApiClient( + host=self.genai_config.base_url, timeout=self.timeout + ) + except Exception: + return [] try: - response = self.provider.list() + response = client.list() return sorted( m.get("name", m.get("model", "")) for m in response.get("models", []) )