"""OpenAI embedding adapter — implements EmbeddingProvider port.""" from openai import AsyncOpenAI class OpenAIEmbeddingProvider: def __init__(self, api_key: str, model: str = "text-embedding-3-small"): self._client = AsyncOpenAI(api_key=api_key) if api_key else None self._model = model async def embed_text(self, text: str) -> list[float]: if not self._client: return [] resp = await self._client.embeddings.create(input=[text], model=self._model) return resp.data[0].embedding async def embed_texts(self, texts: list[str]) -> list[list[float]]: if not self._client or not texts: return [] resp = await self._client.embeddings.create(input=texts, model=self._model) return [item.embedding for item in sorted(resp.data, key=lambda d: d.index)]