diff --git a/api/ollama_patch.py b/api/ollama_patch.py index bb6a77294..cc04b7317 100644 --- a/api/ollama_patch.py +++ b/api/ollama_patch.py @@ -1,5 +1,5 @@ import logging -import requests + import os # Configure logging @@ -23,30 +23,25 @@ def check_ollama_model_exists(model_name: str, ollama_host: str = None) -> bool: Returns: bool: True if model exists, False otherwise """ + import ollama + import httpx if ollama_host is None: ollama_host = os.getenv("OLLAMA_HOST", "http://localhost:11434") - try: # Remove /api prefix if present and add it back if ollama_host.endswith('/api'): ollama_host = ollama_host[:-4] - - response = requests.get(f"{ollama_host}/api/tags", timeout=5) - if response.status_code == 200: - models_data = response.json() - available_models = [model.get('name', '').split(':')[0] for model in models_data.get('models', [])] - model_base_name = model_name.split(':')[0] # Remove tag if present - - is_available = model_base_name in available_models - if is_available: - logger.info(f"Ollama model '{model_name}' is available") - else: - logger.warning(f"Ollama model '{model_name}' is not available. Available models: {available_models}") - return is_available + ret: ollama.ListResponse = ollama.Client(host=ollama_host, timeout=5).list() + is_available = any(model_name == model.model for model in ret.models) + if is_available: + logger.info("Ollama model '%s' is available", model_name) else: - logger.warning(f"Could not check Ollama models, status code: {response.status_code}") - return False - except requests.exceptions.RequestException as e: + logger.warning( + "Ollama model '%s' is not available. Available models: %s. ", + model_name, + str([model.model for model in ret.models])) + return is_available + except (httpx.ConnectTimeout, ConnectionError) as e: logger.warning(f"Could not connect to Ollama to check models: {e}") return False except Exception as e: