| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- from __future__ import annotations
- import json
- from typing_extensions import override
- import httpx
- from openai import _legacy_response
- from openai._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
- from openai._utils import maybe_transform, async_maybe_transform
- from openai._base_client import make_request_options
- from openai.resources.realtime.calls import Calls, AsyncCalls
- from openai.types.realtime.realtime_session_create_request_param import RealtimeSessionCreateRequestParam
- __all__ = ["_Calls", "_AsyncCalls"]
- # Custom code to override the `create` method to have correct behavior with
- # application/sdp and multipart/form-data.
- # Ideally we can cutover to the generated code this overrides eventually and remove this.
- class _Calls(Calls):
- @override
- def create(
- self,
- *,
- sdp: str,
- session: RealtimeSessionCreateRequestParam | Omit = omit,
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> _legacy_response.HttpxBinaryResponseContent:
- if session is omit:
- extra_headers = {"Accept": "application/sdp", "Content-Type": "application/sdp", **(extra_headers or {})}
- return self._post(
- "/realtime/calls",
- body=sdp.encode("utf-8"),
- options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, timeout=timeout),
- cast_to=_legacy_response.HttpxBinaryResponseContent,
- )
- extra_headers = {"Accept": "application/sdp", "Content-Type": "multipart/form-data", **(extra_headers or {})}
- session_payload = maybe_transform(session, RealtimeSessionCreateRequestParam)
- files = [
- ("sdp", (None, sdp.encode("utf-8"), "application/sdp")),
- ("session", (None, json.dumps(session_payload).encode("utf-8"), "application/json")),
- ]
- return self._post(
- "/realtime/calls",
- files=files,
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=_legacy_response.HttpxBinaryResponseContent,
- )
- class _AsyncCalls(AsyncCalls):
- @override
- async def create(
- self,
- *,
- sdp: str,
- session: RealtimeSessionCreateRequestParam | Omit = omit,
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> _legacy_response.HttpxBinaryResponseContent:
- if session is omit:
- extra_headers = {"Accept": "application/sdp", "Content-Type": "application/sdp", **(extra_headers or {})}
- return await self._post(
- "/realtime/calls",
- body=sdp.encode("utf-8"),
- options=make_request_options(extra_headers=extra_headers, extra_query=extra_query, timeout=timeout),
- cast_to=_legacy_response.HttpxBinaryResponseContent,
- )
- extra_headers = {"Accept": "application/sdp", "Content-Type": "multipart/form-data", **(extra_headers or {})}
- session_payload = await async_maybe_transform(session, RealtimeSessionCreateRequestParam)
- files = [
- ("sdp", (None, sdp.encode("utf-8"), "application/sdp")),
- ("session", (None, json.dumps(session_payload).encode("utf-8"), "application/json")),
- ]
- return await self._post(
- "/realtime/calls",
- files=files,
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=_legacy_response.HttpxBinaryResponseContent,
- )
|