22 lines
852 B
Python
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)]
|