Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 39 additions & 18 deletions app/services/providers/openai_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@

import aiohttp
from app.core.logger import get_logger
from app.exceptions.exceptions import ProviderAPIException, BaseInvalidRequestException
from app.exceptions import (
ProviderAPIException,
BaseInvalidRequestException,
)

from .base import ProviderAdapter

# Configure logging
logger = get_logger(name="openai_adapter")


MAX_BATCH_SIZE = 2048


class OpenAIAdapter(ProviderAdapter):
"""Adapter for OpenAI API"""

Expand Down Expand Up @@ -256,21 +262,36 @@ async def process_embeddings(
url = f"{base_url or self._base_url}/{endpoint}"
query_params = query_params or {}

async with (
aiohttp.ClientSession() as session,
session.post(
url, headers=headers, json=payload, params=query_params
) as response,
):
if response.status != HTTPStatus.OK:
error_text = await response.text()
logger.error(
f"Embeddings API error for {self.provider_name}: {error_text}"
)
raise ProviderAPIException(
provider_name=self.provider_name,
error_code=response.status,
error_message=error_text,
)
all_embeddings = []
for i in range(0, len(payload["input"]), MAX_BATCH_SIZE):
batch_payload = payload.copy()
batch_payload["input"] = payload["input"][i : i + MAX_BATCH_SIZE]

return await response.json()
async with (
aiohttp.ClientSession() as session,
session.post(
url, headers=headers, json=batch_payload, params=query_params
) as response,
):
if response.status != HTTPStatus.OK:
error_text = await response.text()
logger.error(
f"Embeddings API error for {self.provider_name}: {error_text}"
)
raise ProviderAPIException(
provider_name=self.provider_name,
error_code=response.status,
error_message=error_text,
)

response_json = await response.json()
all_embeddings.extend(response_json["data"])

# Combine the results into a single response
final_response = {
"object": "list",
"data": all_embeddings,
"model": response_json["model"],
"usage": response_json["usage"],
}
return final_response
Loading