"""OpenAI-compatible provider — works with any OpenAI-compatible API endpoint.""" from __future__ import annotations from typing import Any from voice_to_notes.providers.base import AIProvider class OpenAICompatibleProvider(AIProvider): """Connects to any OpenAI-compatible API (LiteLLM proxy, Ollama, vLLM, etc.).""" def __init__( self, api_key: str | None = None, api_base: str | None = None, model: str = "gpt-4o-mini", **kwargs: Any, ) -> None: self._api_key = api_key or "sk-no-key" self._api_base = api_base self._model = model self._extra_kwargs = kwargs def chat(self, messages: list[dict[str, str]], **kwargs: Any) -> str: from openai import OpenAI client_kwargs: dict[str, Any] = {"api_key": self._api_key} if self._api_base: client_kwargs["base_url"] = self._api_base client = OpenAI(**client_kwargs) response = client.chat.completions.create( model=kwargs.get("model", self._model), messages=messages, temperature=kwargs.get("temperature", 0.7), max_tokens=kwargs.get("max_tokens", 2048), ) return response.choices[0].message.content or "" def is_available(self) -> bool: try: import openai # noqa: F401 return bool(self._api_key and self._api_base) except ImportError: return False @property def name(self) -> str: return "OpenAI Compatible"