diff --git a/python/voice_to_notes/providers/local_provider.py b/python/voice_to_notes/providers/local_provider.py index ac904aa..f278f4c 100644 --- a/python/voice_to_notes/providers/local_provider.py +++ b/python/voice_to_notes/providers/local_provider.py @@ -1,4 +1,4 @@ -"""Local AI provider — bundled llama-server (OpenAI-compatible API).""" +"""Local AI provider — Ollama or any OpenAI-compatible API.""" from __future__ import annotations @@ -9,9 +9,9 @@ from voice_to_notes.providers.base import AIProvider class LocalProvider(AIProvider): - """Connects to bundled llama-server via its OpenAI-compatible API.""" + """Connects to Ollama or any OpenAI-compatible API server.""" - def __init__(self, base_url: str = "http://localhost:8080", model: str = "local") -> None: + def __init__(self, base_url: str = "http://localhost:11434/v1", model: str = "llama3.2") -> None: self._base_url = base_url.rstrip("/") self._model = model self._client: Any = None @@ -24,8 +24,8 @@ class LocalProvider(AIProvider): from openai import OpenAI self._client = OpenAI( - base_url=f"{self._base_url}/v1", - api_key="not-needed", # llama-server doesn't require an API key + base_url=self._base_url, + api_key="ollama", # Ollama doesn't require a real key ) except ImportError: raise RuntimeError( @@ -47,7 +47,9 @@ class LocalProvider(AIProvider): try: import urllib.request - req = urllib.request.Request(f"{self._base_url}/health", method="GET") + # Check base URL without /v1 suffix for Ollama root endpoint + root_url = self._base_url.replace("/v1", "") + req = urllib.request.Request(root_url, method="GET") with urllib.request.urlopen(req, timeout=2) as resp: return resp.status == 200 except Exception: @@ -55,4 +57,4 @@ class LocalProvider(AIProvider): @property def name(self) -> str: - return "Local (llama-server)" + return "Ollama"