aidial_adapter_openai/mistral.py (23 lines of code) (raw):
from typing import Any
from openai import AsyncOpenAI, AsyncStream
from openai.types.chat.chat_completion import ChatCompletion
from openai.types.chat.chat_completion_chunk import ChatCompletionChunk
from aidial_adapter_openai.utils.auth import OpenAICreds
from aidial_adapter_openai.utils.http_client import get_http_client
from aidial_adapter_openai.utils.reflection import call_with_extra_body
from aidial_adapter_openai.utils.streaming import chunk_to_dict, map_stream
async def chat_completion(
data: Any, upstream_endpoint: str, creds: OpenAICreds
):
client = AsyncOpenAI(
base_url=upstream_endpoint,
api_key=creds.get("api_key"),
http_client=get_http_client(),
)
response: AsyncStream[ChatCompletionChunk] | ChatCompletion = (
await call_with_extra_body(client.chat.completions.create, data)
)
if isinstance(response, AsyncStream):
return map_stream(chunk_to_dict, response)
else:
return response