Files
life-echo/api/app/adapters/embedding/openai.py

22 lines
852 B
Python

"""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)]