"""OpenAI provider — direct OpenAI SDK integration.""" from __future__ import annotations import os from typing import Any from voice_to_notes.providers.base import AIProvider class OpenAIProvider(AIProvider): """Connects to the OpenAI API.""" def __init__( self, api_key: str | None = None, model: str = "gpt-4o-mini", ) -> None: self._api_key = api_key or os.environ.get("OPENAI_API_KEY", "") self._model = model self._client: Any = None def _ensure_client(self) -> Any: if self._client is not None: return self._client if not self._api_key: raise RuntimeError("OpenAI API key not configured. Set OPENAI_API_KEY or provide it in settings.") try: from openai import OpenAI self._client = OpenAI(api_key=self._api_key) except ImportError: raise RuntimeError("openai package is required. Install with: pip install openai") return self._client def chat(self, messages: list[dict[str, str]], **kwargs: Any) -> str: client = self._ensure_client() 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: return bool(self._api_key) @property def name(self) -> str: return "OpenAI"