From 7c43ee68293371a1903da7d7b87c410fe467f1e1 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Sun, 10 Aug 2025 17:12:24 +0530 Subject: [PATCH 01/14] feat: updated toml file --- vendorize.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendorize.toml b/vendorize.toml index 347e5239..96c90858 100644 --- a/vendorize.toml +++ b/vendorize.toml @@ -1,4 +1,4 @@ target = "portkey_ai/_vendor" packages = [ - "openai==1.86.0" + "openai==1.99.6" ] \ No newline at end of file From c5ad40bc799623d2e9d5edbf75a354f23f998010 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Sun, 10 Aug 2025 17:21:00 +0530 Subject: [PATCH 02/14] feat: update the should retry logic --- portkey_ai/_vendor/openai/_base_client.py | 54 +++++++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/portkey_ai/_vendor/openai/_base_client.py b/portkey_ai/_vendor/openai/_base_client.py index 8c1ea8ad..7e116157 100644 --- a/portkey_ai/_vendor/openai/_base_client.py +++ b/portkey_ai/_vendor/openai/_base_client.py @@ -531,6 +531,18 @@ def _build_request( # work around https://github.com/encode/httpx/discussions/2880 kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")} + is_body_allowed = options.method.lower() != "get" + + if is_body_allowed: + if isinstance(json_data, bytes): + kwargs["content"] = json_data + else: + kwargs["json"] = json_data if is_given(json_data) else None + kwargs["files"] = files + else: + headers.pop("Content-Type", None) + kwargs.pop("data", None) + # TODO: report this error to httpx return self._client.build_request( # pyright: ignore[reportUnknownMemberType] headers=headers, @@ -542,8 +554,6 @@ def _build_request( # so that passing a `TypedDict` doesn't cause an error. # https://github.com/microsoft/pyright/issues/3526#event-6715453066 params=self.qs.stringify(cast(Mapping[str, Any], params)) if params else None, - json=json_data if is_given(json_data) else None, - files=files, **kwargs, ) @@ -1105,7 +1115,14 @@ def _process_response( origin = get_origin(cast_to) or cast_to - if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse): + if ( + inspect.isclass(origin) + and issubclass(origin, BaseAPIResponse) + # we only want to actually return the custom BaseAPIResponse class if we're + # returning the raw response, or if we're not streaming SSE, as if we're streaming + # SSE then `cast_to` doesn't actively reflect the type we need to parse into + and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER))) + ): if not issubclass(origin, APIResponse): raise TypeError(f"API Response types must subclass {APIResponse}; Received {origin}") @@ -1316,6 +1333,24 @@ def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) +try: + import httpx_aiohttp +except ImportError: + + class _DefaultAioHttpClient(httpx.AsyncClient): + def __init__(self, **_kwargs: Any) -> None: + raise RuntimeError("To use the aiohttp client you must have installed the package with the `aiohttp` extra") +else: + + class _DefaultAioHttpClient(httpx_aiohttp.HttpxAiohttpClient): # type: ignore + def __init__(self, **kwargs: Any) -> None: + kwargs.setdefault("timeout", DEFAULT_TIMEOUT) + kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS) + kwargs.setdefault("follow_redirects", True) + + super().__init__(**kwargs) + + if TYPE_CHECKING: DefaultAsyncHttpxClient = httpx.AsyncClient """An alias to `httpx.AsyncClient` that provides the same defaults that this SDK @@ -1324,8 +1359,12 @@ def __init__(self, **kwargs: Any) -> None: This is useful because overriding the `http_client` with your own instance of `httpx.AsyncClient` will result in httpx's defaults being used, not ours. """ + + DefaultAioHttpClient = httpx.AsyncClient + """An alias to `httpx.AsyncClient` that changes the default HTTP transport to `aiohttp`.""" else: DefaultAsyncHttpxClient = _DefaultAsyncHttpxClient + DefaultAioHttpClient = _DefaultAioHttpClient class AsyncHttpxClientWrapper(DefaultAsyncHttpxClient): @@ -1623,7 +1662,14 @@ async def _process_response( origin = get_origin(cast_to) or cast_to - if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse): + if ( + inspect.isclass(origin) + and issubclass(origin, BaseAPIResponse) + # we only want to actually return the custom BaseAPIResponse class if we're + # returning the raw response, or if we're not streaming SSE, as if we're streaming + # SSE then `cast_to` doesn't actively reflect the type we need to parse into + and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER))) + ): if not issubclass(origin, AsyncAPIResponse): raise TypeError(f"API Response types must subclass {AsyncAPIResponse}; Received {origin}") From 7c8c494a20ff5a5128c8e0dfbd17456b96a165c1 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Sun, 10 Aug 2025 20:35:00 +0530 Subject: [PATCH 03/14] feat: create + upload poll parameters --- portkey_ai/api_resources/apis/vector_stores.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/portkey_ai/api_resources/apis/vector_stores.py b/portkey_ai/api_resources/apis/vector_stores.py index e6de8a15..7b07c1ad 100644 --- a/portkey_ai/api_resources/apis/vector_stores.py +++ b/portkey_ai/api_resources/apis/vector_stores.py @@ -1,5 +1,5 @@ import json -from typing import Any, Iterable, List, Optional, Union +from typing import Any, Dict, Iterable, List, Optional, Union import typing from portkey_ai.api_resources.apis.api_resource import APIResource, AsyncAPIResource from portkey_ai.api_resources.client import AsyncPortkey, Portkey @@ -229,6 +229,7 @@ def create_and_poll( file_id: str, *, vector_store_id: str, + attributes: Union[Optional[Dict[str, Union[str, float, bool]]], NotGiven] = NOT_GIVEN, poll_interval_ms: Union[int, NotGiven] = NOT_GIVEN, chunking_strategy: Union[Any, NotGiven] = NOT_GIVEN, **kwargs, @@ -236,6 +237,7 @@ def create_and_poll( response = self.openai_client.vector_stores.files.create_and_poll( file_id=file_id, vector_store_id=vector_store_id, + attributes=attributes, poll_interval_ms=poll_interval_ms, chunking_strategy=chunking_strategy, **kwargs, @@ -284,6 +286,7 @@ def upload_and_poll( *, vector_store_id: str, file: FileTypes, + attributes: Union[Optional[Dict[str, Union[str, float, bool]]], NotGiven] = NOT_GIVEN, poll_interval_ms: Union[int, NotGiven] = NOT_GIVEN, chunking_strategy: Union[Any, NotGiven] = NOT_GIVEN, **kwargs, @@ -291,6 +294,7 @@ def upload_and_poll( response = self.openai_client.vector_stores.files.upload_and_poll( vector_store_id=vector_store_id, file=file, + attributes=attributes, poll_interval_ms=poll_interval_ms, chunking_strategy=chunking_strategy, **kwargs, From 3982f44fcd306ceaf0de1c35bba98d7fbca1b1ff Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Sun, 10 Aug 2025 20:36:49 +0530 Subject: [PATCH 04/14] fix: format --- portkey_ai/api_resources/apis/vector_stores.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/portkey_ai/api_resources/apis/vector_stores.py b/portkey_ai/api_resources/apis/vector_stores.py index 7b07c1ad..3734ab50 100644 --- a/portkey_ai/api_resources/apis/vector_stores.py +++ b/portkey_ai/api_resources/apis/vector_stores.py @@ -229,7 +229,9 @@ def create_and_poll( file_id: str, *, vector_store_id: str, - attributes: Union[Optional[Dict[str, Union[str, float, bool]]], NotGiven] = NOT_GIVEN, + attributes: Union[ + Optional[Dict[str, Union[str, float, bool]]], NotGiven + ] = NOT_GIVEN, poll_interval_ms: Union[int, NotGiven] = NOT_GIVEN, chunking_strategy: Union[Any, NotGiven] = NOT_GIVEN, **kwargs, @@ -286,7 +288,9 @@ def upload_and_poll( *, vector_store_id: str, file: FileTypes, - attributes: Union[Optional[Dict[str, Union[str, float, bool]]], NotGiven] = NOT_GIVEN, + attributes: Union[ + Optional[Dict[str, Union[str, float, bool]]], NotGiven + ] = NOT_GIVEN, poll_interval_ms: Union[int, NotGiven] = NOT_GIVEN, chunking_strategy: Union[Any, NotGiven] = NOT_GIVEN, **kwargs, From cb454aa7cc70696f020f3820b42e759eb756ad5e Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Sun, 10 Aug 2025 20:46:22 +0530 Subject: [PATCH 05/14] fix: adding files file from vendor --- .../openai/resources/vector_stores/files.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/portkey_ai/_vendor/openai/resources/vector_stores/files.py b/portkey_ai/_vendor/openai/resources/vector_stores/files.py index f8603846..2c90bb7a 100644 --- a/portkey_ai/_vendor/openai/resources/vector_stores/files.py +++ b/portkey_ai/_vendor/openai/resources/vector_stores/files.py @@ -304,11 +304,14 @@ def create_and_poll( file_id: str, *, vector_store_id: str, + attributes: Optional[Dict[str, Union[str, float, bool]]] | NotGiven = NOT_GIVEN, poll_interval_ms: int | NotGiven = NOT_GIVEN, chunking_strategy: FileChunkingStrategyParam | NotGiven = NOT_GIVEN, ) -> VectorStoreFile: """Attach a file to the given vector store and wait for it to be processed.""" - self.create(vector_store_id=vector_store_id, file_id=file_id, chunking_strategy=chunking_strategy) + self.create( + vector_store_id=vector_store_id, file_id=file_id, chunking_strategy=chunking_strategy, attributes=attributes + ) return self.poll( file_id, @@ -377,6 +380,7 @@ def upload_and_poll( *, vector_store_id: str, file: FileTypes, + attributes: Optional[Dict[str, Union[str, float, bool]]] | NotGiven = NOT_GIVEN, poll_interval_ms: int | NotGiven = NOT_GIVEN, chunking_strategy: FileChunkingStrategyParam | NotGiven = NOT_GIVEN, ) -> VectorStoreFile: @@ -387,6 +391,7 @@ def upload_and_poll( file_id=file_obj.id, chunking_strategy=chunking_strategy, poll_interval_ms=poll_interval_ms, + attributes=attributes, ) def content( @@ -707,11 +712,14 @@ async def create_and_poll( file_id: str, *, vector_store_id: str, + attributes: Optional[Dict[str, Union[str, float, bool]]] | NotGiven = NOT_GIVEN, poll_interval_ms: int | NotGiven = NOT_GIVEN, chunking_strategy: FileChunkingStrategyParam | NotGiven = NOT_GIVEN, ) -> VectorStoreFile: """Attach a file to the given vector store and wait for it to be processed.""" - await self.create(vector_store_id=vector_store_id, file_id=file_id, chunking_strategy=chunking_strategy) + await self.create( + vector_store_id=vector_store_id, file_id=file_id, chunking_strategy=chunking_strategy, attributes=attributes + ) return await self.poll( file_id, @@ -782,6 +790,7 @@ async def upload_and_poll( *, vector_store_id: str, file: FileTypes, + attributes: Optional[Dict[str, Union[str, float, bool]]] | NotGiven = NOT_GIVEN, poll_interval_ms: int | NotGiven = NOT_GIVEN, chunking_strategy: FileChunkingStrategyParam | NotGiven = NOT_GIVEN, ) -> VectorStoreFile: @@ -792,6 +801,7 @@ async def upload_and_poll( file_id=file_obj.id, poll_interval_ms=poll_interval_ms, chunking_strategy=chunking_strategy, + attributes=attributes, ) def content( From d579317bc6f32c027a3a8c204866e7295fb376b3 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Tue, 12 Aug 2025 11:57:43 +0530 Subject: [PATCH 06/14] feat: steaming for images generate --- portkey_ai/api_resources/apis/images.py | 242 ++++++++++++++++++++---- 1 file changed, 207 insertions(+), 35 deletions(-) diff --git a/portkey_ai/api_resources/apis/images.py b/portkey_ai/api_resources/apis/images.py index c9a22660..ae30436d 100644 --- a/portkey_ai/api_resources/apis/images.py +++ b/portkey_ai/api_resources/apis/images.py @@ -1,10 +1,16 @@ import json -from typing import Union, Any +from typing import Literal, Optional, Union, Any import typing +from portkey_ai._vendor.openai._streaming import AsyncStream, Stream +from portkey_ai._vendor.openai.types.image_gen_stream_event import ImageGenStreamEvent +from portkey_ai._vendor.openai.types.images_response import ( + ImagesResponse as OpenAIImagesResponse, +) from portkey_ai.api_resources.apis.api_resource import APIResource, AsyncAPIResource from portkey_ai.api_resources.client import AsyncPortkey, Portkey from portkey_ai.api_resources.types.image_type import ImagesResponse from ..._vendor.openai._types import NotGiven, NOT_GIVEN +from typing_extensions import overload class Images(APIResource): @@ -68,35 +74,118 @@ def edit( return data - @typing.no_type_check + @overload def generate( self, *, prompt: str, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, model: Union[str, NotGiven] = NOT_GIVEN, - n: Union[int, NotGiven] = NOT_GIVEN, - quality: Union[str, NotGiven] = NOT_GIVEN, - response_format: Union[str, NotGiven] = NOT_GIVEN, - size: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[Optional[Literal[False]], NotGiven] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, - style: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> ImagesResponse: - response = self.openai_client.with_raw_response.images.generate( + ) -> OpenAIImagesResponse: + ... + + @overload + def generate( + self, + *, + prompt: str, + stream: Literal[True], + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Stream[ImageGenStreamEvent]: + ... + + @overload + def generate( + self, + *, + prompt: str, + stream: bool, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, Stream[ImageGenStreamEvent]]: + ... + + def generate( + self, + *, + prompt: str, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[ + Optional[Union[Literal[False], Literal[True]]], NotGiven + ] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, Stream[ImageGenStreamEvent]]: + extra_headers = kwargs.pop("extra_headers", None) + extra_query = kwargs.pop("extra_query", None) + extra_body = kwargs.pop("extra_body", None) + timeout = kwargs.pop("timeout", None) + + return self.openai_client.images.generate( # type: ignore[misc] prompt=prompt, + background=background, # type: ignore[arg-type] model=model, + moderation=moderation, # type: ignore[arg-type] n=n, - quality=quality, - response_format=response_format, - size=size, - style=style, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] + style=style, # type: ignore[arg-type] user=user, - extra_body=kwargs, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, ) - data = ImagesResponse(**json.loads(response.text)) - data._headers = response.headers - - return data class AsyncImages(AsyncAPIResource): @@ -158,32 +247,115 @@ async def edit( return data - @typing.no_type_check + @overload async def generate( self, *, prompt: str, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, model: Union[str, NotGiven] = NOT_GIVEN, - n: Union[int, NotGiven] = NOT_GIVEN, - quality: Union[str, NotGiven] = NOT_GIVEN, - response_format: Union[str, NotGiven] = NOT_GIVEN, - size: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[Optional[Literal[False]], NotGiven] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, - style: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> ImagesResponse: - response = await self.openai_client.with_raw_response.images.generate( + ) -> OpenAIImagesResponse: + ... + + @overload + async def generate( + self, + *, + prompt: str, + stream: Literal[True], + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> AsyncStream[ImageGenStreamEvent]: + ... + + @overload + async def generate( + self, + *, + prompt: str, + stream: bool, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageGenStreamEvent]]: + ... + + async def generate( + self, + *, + prompt: str, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + moderation: Union[Optional[str], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[ + Optional[Union[Literal[False], Literal[True]]], NotGiven + ] = NOT_GIVEN, + style: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageGenStreamEvent]]: + extra_headers = kwargs.pop("extra_headers", None) + extra_query = kwargs.pop("extra_query", None) + extra_body = kwargs.pop("extra_body", None) + timeout = kwargs.pop("timeout", None) + + return await self.openai_client.images.generate( # type: ignore[misc] prompt=prompt, + background=background, # type: ignore[arg-type] model=model, + moderation=moderation, # type: ignore[arg-type] n=n, - quality=quality, - response_format=response_format, - size=size, - style=style, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] + style=style, # type: ignore[arg-type] user=user, - extra_body=kwargs, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, ) - data = ImagesResponse(**json.loads(response.text)) - data._headers = response.headers - - return data From 31e24e817c5a82e46e7dd66b27ba34ed466d7afb Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Tue, 12 Aug 2025 18:32:20 +0530 Subject: [PATCH 07/14] feat: steaming for images edit --- portkey_ai/api_resources/apis/images.py | 241 ++++++++++++++++++++---- 1 file changed, 207 insertions(+), 34 deletions(-) diff --git a/portkey_ai/api_resources/apis/images.py b/portkey_ai/api_resources/apis/images.py index ae30436d..45c6a234 100644 --- a/portkey_ai/api_resources/apis/images.py +++ b/portkey_ai/api_resources/apis/images.py @@ -1,7 +1,8 @@ import json -from typing import Literal, Optional, Union, Any +from typing import List, Literal, Optional, Union import typing from portkey_ai._vendor.openai._streaming import AsyncStream, Stream +from portkey_ai._vendor.openai.types.image_edit_stream_event import ImageEditStreamEvent from portkey_ai._vendor.openai.types.image_gen_stream_event import ImageGenStreamEvent from portkey_ai._vendor.openai.types.images_response import ( ImagesResponse as OpenAIImagesResponse, @@ -9,7 +10,7 @@ from portkey_ai.api_resources.apis.api_resource import APIResource, AsyncAPIResource from portkey_ai.api_resources.client import AsyncPortkey, Portkey from portkey_ai.api_resources.types.image_type import ImagesResponse -from ..._vendor.openai._types import NotGiven, NOT_GIVEN +from ..._vendor.openai._types import FileTypes, NotGiven, NOT_GIVEN from typing_extensions import overload @@ -44,35 +45,121 @@ def create_variation( return data - @typing.no_type_check + @overload def edit( self, *, + image: Union[FileTypes, List[FileTypes]], prompt: str, - image, - mask: Union[Any, NotGiven] = NOT_GIVEN, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, model: Union[str, NotGiven] = NOT_GIVEN, - n: Union[int, NotGiven] = NOT_GIVEN, - response_format: Union[str, NotGiven] = NOT_GIVEN, - size: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[Optional[Literal[False]], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> ImagesResponse: - response = self.openai_client.with_raw_response.images.edit( - prompt=prompt, + ) -> OpenAIImagesResponse: + ... + + @overload + def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + stream: Literal[True], + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Stream[ImageEditStreamEvent]: + ... + + @overload + def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + stream: bool, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, Stream[ImageEditStreamEvent]]: + ... + + def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[Optional[Literal[False]], Literal[True], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, Stream[ImageEditStreamEvent]]: + extra_headers = kwargs.pop("extra_headers", None) + extra_query = kwargs.pop("extra_query", None) + extra_body = kwargs.pop("extra_body", None) + timeout = kwargs.pop("timeout", None) + + return self.openai_client.images.edit( # type: ignore[misc] image=image, + prompt=prompt, + background=background, # type: ignore[arg-type] + input_fidelity=input_fidelity, # type: ignore[arg-type] mask=mask, model=model, n=n, - response_format=response_format, - size=size, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] user=user, - extra_body=kwargs, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, ) - data = ImagesResponse(**json.loads(response.text)) - data._headers = response.headers - - return data @overload def generate( @@ -217,35 +304,121 @@ async def create_variation( return data - @typing.no_type_check + @overload async def edit( self, *, + image: Union[FileTypes, List[FileTypes]], prompt: str, - image, - mask: Union[Any, NotGiven] = NOT_GIVEN, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, model: Union[str, NotGiven] = NOT_GIVEN, - n: Union[int, NotGiven] = NOT_GIVEN, - response_format: Union[str, NotGiven] = NOT_GIVEN, - size: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[Optional[Literal[False]], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> ImagesResponse: - response = await self.openai_client.with_raw_response.images.edit( - prompt=prompt, + ) -> OpenAIImagesResponse: + ... + + @overload + async def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + stream: Literal[True], + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> AsyncStream[ImageEditStreamEvent]: + ... + + @overload + async def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + stream: bool, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageEditStreamEvent]]: + ... + + async def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + background: Union[Optional[str], NotGiven] = NOT_GIVEN, + input_fidelity: Union[Optional[str], NotGiven] = NOT_GIVEN, + mask: Union[FileTypes, NotGiven] = NOT_GIVEN, + model: Union[str, NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_compression: Union[Optional[int], NotGiven] = NOT_GIVEN, + output_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + partial_images: Union[Optional[int], NotGiven] = NOT_GIVEN, + quality: Union[Optional[str], NotGiven] = NOT_GIVEN, + response_format: Union[Optional[str], NotGiven] = NOT_GIVEN, + size: Union[Optional[str], NotGiven] = NOT_GIVEN, + stream: Union[Optional[Literal[False]], Literal[True], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + **kwargs + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageEditStreamEvent]]: + extra_headers = kwargs.pop("extra_headers", None) + extra_query = kwargs.pop("extra_query", None) + extra_body = kwargs.pop("extra_body", None) + timeout = kwargs.pop("timeout", None) + + return await self.openai_client.images.edit( # type: ignore[misc] image=image, + prompt=prompt, + background=background, # type: ignore[arg-type] + input_fidelity=input_fidelity, # type: ignore[arg-type] mask=mask, model=model, n=n, - response_format=response_format, - size=size, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] user=user, - extra_body=kwargs, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, ) - data = ImagesResponse(**json.loads(response.text)) - data._headers = response.headers - - return data @overload async def generate( From 392ec83f2d90da903f54e1da3856b706bb5106c5 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Tue, 12 Aug 2025 19:40:32 +0530 Subject: [PATCH 08/14] feat: webhook support added --- portkey_ai/__init__.py | 4 ++ portkey_ai/api_resources/__init__.py | 4 ++ portkey_ai/api_resources/apis/__init__.py | 4 ++ portkey_ai/api_resources/apis/webhooks.py | 75 +++++++++++++++++++++++ portkey_ai/api_resources/base_client.py | 4 ++ portkey_ai/api_resources/client.py | 14 +++++ 6 files changed, 105 insertions(+) create mode 100644 portkey_ai/api_resources/apis/webhooks.py diff --git a/portkey_ai/__init__.py b/portkey_ai/__init__.py index b165056f..83ff4e23 100644 --- a/portkey_ai/__init__.py +++ b/portkey_ai/__init__.py @@ -123,6 +123,8 @@ AsyncContainersFiles, Content, AsyncContent, + Webhooks, + AsyncWebhooks, ) from portkey_ai.version import VERSION @@ -265,4 +267,6 @@ "AsyncContainersFiles", "Content", "AsyncContent", + "Webhooks", + "AsyncWebhooks", ] diff --git a/portkey_ai/api_resources/__init__.py b/portkey_ai/api_resources/__init__.py index cb2716da..957d7cc1 100644 --- a/portkey_ai/api_resources/__init__.py +++ b/portkey_ai/api_resources/__init__.py @@ -111,6 +111,8 @@ AsyncContainersFiles, Content, AsyncContent, + Webhooks, + AsyncWebhooks, ) from .utils import ( Modes, @@ -257,4 +259,6 @@ "AsyncContainersFiles", "Content", "AsyncContent", + "Webhooks", + "AsyncWebhooks", ] diff --git a/portkey_ai/api_resources/apis/__init__.py b/portkey_ai/api_resources/apis/__init__.py index 92b9ff4a..c0fa85e0 100644 --- a/portkey_ai/api_resources/apis/__init__.py +++ b/portkey_ai/api_resources/apis/__init__.py @@ -129,6 +129,8 @@ AsyncContent, ) +from .webhooks import Webhooks, AsyncWebhooks + from .configs import Configs, AsyncConfigs from .api_keys import ApiKeys, AsyncApiKeys @@ -263,4 +265,6 @@ "AsyncContainersFiles", "Content", "AsyncContent", + "Webhooks", + "AsyncWebhooks", ] diff --git a/portkey_ai/api_resources/apis/webhooks.py b/portkey_ai/api_resources/apis/webhooks.py new file mode 100644 index 00000000..9731e84e --- /dev/null +++ b/portkey_ai/api_resources/apis/webhooks.py @@ -0,0 +1,75 @@ +from typing import Union +from portkey_ai._vendor.openai._types import HeadersLike +from portkey_ai._vendor.openai.types.webhooks.unwrap_webhook_event import ( + UnwrapWebhookEvent, +) +from portkey_ai.api_resources.apis.api_resource import APIResource, AsyncAPIResource +from portkey_ai.api_resources.client import AsyncPortkey, Portkey + + +class Webhooks(APIResource): + def __init__(self, client: Portkey) -> None: + super().__init__(client) + self.openai_client = client.openai_client + + def unwrap( + self, + payload: Union[str, bytes], + headers: HeadersLike, + *, + secret: Union[str, None] = None, + ) -> UnwrapWebhookEvent: + return self.openai_client.webhooks.unwrap( + payload=payload, + headers=headers, + secret=secret, + ) + + def verify_signature( + self, + payload: Union[str, bytes], + headers: HeadersLike, + *, + secret: Union[str, None] = None, + tolerance: int = 300, + ) -> None: + return self.openai_client.webhooks.verify_signature( + payload=payload, + headers=headers, + secret=secret, + tolerance=tolerance, + ) + + +class AsyncWebhooks(AsyncAPIResource): + def __init__(self, client: AsyncPortkey) -> None: + super().__init__(client) + self.openai_client = client.openai_client + + def unwrap( + self, + payload: Union[str, bytes], + headers: HeadersLike, + *, + secret: Union[str, None] = None, + ) -> UnwrapWebhookEvent: + return self.openai_client.webhooks.unwrap( + payload=payload, + headers=headers, + secret=secret, + ) + + def verify_signature( + self, + payload: Union[str, bytes], + headers: HeadersLike, + *, + secret: Union[str, None] = None, + tolerance: int = 300, + ) -> None: + return self.openai_client.webhooks.verify_signature( + payload=payload, + headers=headers, + secret=secret, + tolerance=tolerance, + ) diff --git a/portkey_ai/api_resources/base_client.py b/portkey_ai/api_resources/base_client.py index cd25194c..1b233d15 100644 --- a/portkey_ai/api_resources/base_client.py +++ b/portkey_ai/api_resources/base_client.py @@ -53,6 +53,7 @@ def __init__( api_key: Optional[str] = None, virtual_key: Optional[str] = None, websocket_base_url: Optional[Union[str, httpx.URL]] = None, + webhook_secret: Optional[str] = None, config: Optional[Union[Mapping, str]] = None, provider: Optional[str] = None, trace_id: Optional[str] = None, @@ -97,6 +98,7 @@ def __init__( self.api_key = default_api_key(self.base_url, api_key) self.virtual_key = virtual_key self.websocket_base_url = websocket_base_url + self.webhook_secret = webhook_secret self.config = config self.provider = provider self.trace_id = trace_id @@ -766,6 +768,7 @@ def __init__( api_key: Optional[str] = None, virtual_key: Optional[str] = None, websocket_base_url: Optional[Union[str, httpx.URL]] = None, + webhook_secret: Optional[str] = None, config: Optional[Union[Mapping, str]] = None, provider: Optional[str] = None, trace_id: Optional[str] = None, @@ -810,6 +813,7 @@ def __init__( self.api_key = default_api_key(self.base_url, api_key) self.virtual_key = virtual_key self.websocket_base_url = websocket_base_url + self.webhook_secret = webhook_secret self.config = config self.provider = provider self.trace_id = trace_id diff --git a/portkey_ai/api_resources/client.py b/portkey_ai/api_resources/client.py index 570401d9..a6607b8d 100644 --- a/portkey_ai/api_resources/client.py +++ b/portkey_ai/api_resources/client.py @@ -25,6 +25,7 @@ class Portkey(APIClient): fine_tuning: apis.FineTuning vector_stores: apis.VectorStores responses: apis.Responses + webhooks: apis.Webhooks evals: apis.Evals containers: apis.Containers admin: apis.Admin @@ -55,6 +56,7 @@ def __init__( base_url: Optional[str] = None, virtual_key: Optional[str] = None, websocket_base_url: Optional[Union[str, httpx.URL]] = None, + webhook_secret: Optional[str] = None, config: Optional[Union[Mapping, str]] = None, provider: Optional[str] = None, trace_id: Optional[str] = None, @@ -100,6 +102,7 @@ def __init__( base_url=base_url, virtual_key=virtual_key, websocket_base_url=websocket_base_url, + webhook_secret=webhook_secret, config=config, provider=provider, trace_id=trace_id, @@ -148,6 +151,7 @@ def __init__( http_client=http_client, max_retries=1, websocket_base_url=self.websocket_base_url, + webhook_secret=self.webhook_secret, ) self.completions = apis.Completion(self) @@ -165,6 +169,7 @@ def __init__( self.fine_tuning = apis.FineTuning(self) self.vector_stores = apis.VectorStores(self) self.responses = apis.Responses(self) + self.webhooks = apis.Webhooks(self) self.evals = apis.Evals(self) self.containers = apis.Containers(self) self.admin = apis.Admin(self) @@ -197,6 +202,7 @@ def copy( base_url: Optional[str] = None, virtual_key: Optional[str] = None, websocket_base_url: Optional[Union[str, httpx.URL]] = None, + webhook_secret: Optional[str] = None, config: Optional[Union[Mapping, str]] = None, provider: Optional[str] = None, trace_id: Optional[str] = None, @@ -242,6 +248,7 @@ def copy( base_url=base_url or self.base_url, virtual_key=virtual_key or self.virtual_key, websocket_base_url=websocket_base_url or self.websocket_base_url, + webhook_secret=webhook_secret or self.webhook_secret, config=config or self.config, provider=provider or self.provider, trace_id=trace_id or self.trace_id, @@ -342,6 +349,7 @@ class AsyncPortkey(AsyncAPIClient): fine_tuning: apis.AsyncFineTuning vector_stores: apis.AsyncVectorStores responses: apis.AsyncResponses + webhooks: apis.AsyncWebhooks evals: apis.AsyncEvals containers: apis.AsyncContainers admin: apis.AsyncAdmin @@ -372,6 +380,7 @@ def __init__( base_url: Optional[str] = None, virtual_key: Optional[str] = None, websocket_base_url: Optional[Union[str, httpx.URL]] = None, + webhook_secret: Optional[str] = None, config: Optional[Union[Mapping, str]] = None, provider: Optional[str] = None, trace_id: Optional[str] = None, @@ -417,6 +426,7 @@ def __init__( base_url=base_url, virtual_key=virtual_key, websocket_base_url=websocket_base_url, + webhook_secret=webhook_secret, config=config, provider=provider, trace_id=trace_id, @@ -465,6 +475,7 @@ def __init__( http_client=http_client, max_retries=1, websocket_base_url=self.websocket_base_url, + webhook_secret=self.webhook_secret, ) self.completions = apis.AsyncCompletion(self) @@ -482,6 +493,7 @@ def __init__( self.fine_tuning = apis.AsyncFineTuning(self) self.vector_stores = apis.AsyncVectorStores(self) self.responses = apis.AsyncResponses(self) + self.webhooks = apis.AsyncWebhooks(self) self.evals = apis.AsyncEvals(self) self.containers = apis.AsyncContainers(self) self.admin = apis.AsyncAdmin(self) @@ -514,6 +526,7 @@ def copy( base_url: Optional[str] = None, virtual_key: Optional[str] = None, websocket_base_url: Optional[Union[str, httpx.URL]] = None, + webhook_secret: Optional[str] = None, config: Optional[Union[Mapping, str]] = None, provider: Optional[str] = None, trace_id: Optional[str] = None, @@ -559,6 +572,7 @@ def copy( base_url=base_url or self.base_url, virtual_key=virtual_key or self.virtual_key, websocket_base_url=websocket_base_url or self.websocket_base_url, + webhook_secret=webhook_secret or self.webhook_secret, config=config or self.config, provider=provider or self.provider, trace_id=trace_id or self.trace_id, From 570e53925ef2705dfedd9ac601af71e4510a0295 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Tue, 12 Aug 2025 19:59:47 +0530 Subject: [PATCH 09/14] feat: case for non streaming images handled --- portkey_ai/api_resources/apis/images.py | 290 ++++++++++++++++-------- 1 file changed, 196 insertions(+), 94 deletions(-) diff --git a/portkey_ai/api_resources/apis/images.py b/portkey_ai/api_resources/apis/images.py index 45c6a234..db7c942b 100644 --- a/portkey_ai/api_resources/apis/images.py +++ b/portkey_ai/api_resources/apis/images.py @@ -65,7 +65,7 @@ def edit( stream: Union[Optional[Literal[False]], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> OpenAIImagesResponse: + ) -> Union[OpenAIImagesResponse, ImagesResponse]: ... @overload @@ -111,7 +111,7 @@ def edit( size: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, Stream[ImageEditStreamEvent]]: + ) -> Union[OpenAIImagesResponse, Stream[ImageEditStreamEvent], ImagesResponse]: ... def edit( @@ -133,33 +133,59 @@ def edit( stream: Union[Optional[Literal[False]], Literal[True], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, Stream[ImageEditStreamEvent]]: + ) -> Union[OpenAIImagesResponse, Stream[ImageEditStreamEvent], ImagesResponse]: extra_headers = kwargs.pop("extra_headers", None) extra_query = kwargs.pop("extra_query", None) extra_body = kwargs.pop("extra_body", None) timeout = kwargs.pop("timeout", None) - return self.openai_client.images.edit( # type: ignore[misc] - image=image, - prompt=prompt, - background=background, # type: ignore[arg-type] - input_fidelity=input_fidelity, # type: ignore[arg-type] - mask=mask, - model=model, - n=n, - output_compression=output_compression, - output_format=output_format, # type: ignore[arg-type] - partial_images=partial_images, - quality=quality, # type: ignore[arg-type] - response_format=response_format, # type: ignore[arg-type] - size=size, # type: ignore[arg-type] - stream=stream, # type: ignore[arg-type] - user=user, - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - ) + if stream: + return self.openai_client.images.edit( # type: ignore[misc] + image=image, + prompt=prompt, + background=background, # type: ignore[arg-type] + input_fidelity=input_fidelity, # type: ignore[arg-type] + mask=mask, + model=model, + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + else: + response = self.openai_client.with_raw_response.images.edit( # type: ignore[misc] + image=image, + prompt=prompt, + background=background, # type: ignore[arg-type] + input_fidelity=input_fidelity, # type: ignore[arg-type] + mask=mask, + model=model, + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + data = ImagesResponse(**json.loads(response.text)) + data._headers = response.headers + + return data @overload def generate( @@ -180,7 +206,7 @@ def generate( style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> OpenAIImagesResponse: + ) -> Union[OpenAIImagesResponse, ImagesResponse]: ... @overload @@ -224,7 +250,7 @@ def generate( style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, Stream[ImageGenStreamEvent]]: + ) -> Union[OpenAIImagesResponse, Stream[ImageGenStreamEvent], ImagesResponse]: ... def generate( @@ -247,32 +273,57 @@ def generate( style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, Stream[ImageGenStreamEvent]]: + ) -> Union[OpenAIImagesResponse, Stream[ImageGenStreamEvent], ImagesResponse]: extra_headers = kwargs.pop("extra_headers", None) extra_query = kwargs.pop("extra_query", None) extra_body = kwargs.pop("extra_body", None) timeout = kwargs.pop("timeout", None) - return self.openai_client.images.generate( # type: ignore[misc] - prompt=prompt, - background=background, # type: ignore[arg-type] - model=model, - moderation=moderation, # type: ignore[arg-type] - n=n, - output_compression=output_compression, - output_format=output_format, # type: ignore[arg-type] - partial_images=partial_images, - quality=quality, # type: ignore[arg-type] - response_format=response_format, # type: ignore[arg-type] - size=size, # type: ignore[arg-type] - stream=stream, # type: ignore[arg-type] - style=style, # type: ignore[arg-type] - user=user, - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - ) + if stream: + return self.openai_client.images.generate( # type: ignore[misc] + prompt=prompt, + background=background, # type: ignore[arg-type] + model=model, + moderation=moderation, # type: ignore[arg-type] + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] + style=style, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + else: + response = self.openai_client.with_raw_response.images.generate( # type: ignore[misc] + prompt=prompt, + background=background, # type: ignore[arg-type] + model=model, + moderation=moderation, # type: ignore[arg-type] + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + style=style, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + data = ImagesResponse(**json.loads(response.text)) + data._headers = response.headers + + return data class AsyncImages(AsyncAPIResource): @@ -324,7 +375,7 @@ async def edit( stream: Union[Optional[Literal[False]], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> OpenAIImagesResponse: + ) -> Union[OpenAIImagesResponse, ImagesResponse]: ... @overload @@ -370,7 +421,7 @@ async def edit( size: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, AsyncStream[ImageEditStreamEvent]]: + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageEditStreamEvent], ImagesResponse]: ... async def edit( @@ -392,33 +443,59 @@ async def edit( stream: Union[Optional[Literal[False]], Literal[True], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, AsyncStream[ImageEditStreamEvent]]: + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageEditStreamEvent], ImagesResponse]: extra_headers = kwargs.pop("extra_headers", None) extra_query = kwargs.pop("extra_query", None) extra_body = kwargs.pop("extra_body", None) timeout = kwargs.pop("timeout", None) - return await self.openai_client.images.edit( # type: ignore[misc] - image=image, - prompt=prompt, - background=background, # type: ignore[arg-type] - input_fidelity=input_fidelity, # type: ignore[arg-type] - mask=mask, - model=model, - n=n, - output_compression=output_compression, - output_format=output_format, # type: ignore[arg-type] - partial_images=partial_images, - quality=quality, # type: ignore[arg-type] - response_format=response_format, # type: ignore[arg-type] - size=size, # type: ignore[arg-type] - stream=stream, # type: ignore[arg-type] - user=user, - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - ) + if stream: + return await self.openai_client.images.edit( # type: ignore[misc] + image=image, + prompt=prompt, + background=background, # type: ignore[arg-type] + input_fidelity=input_fidelity, # type: ignore[arg-type] + mask=mask, + model=model, + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + else: + response = await self.openai_client.with_raw_response.images.edit( # type: ignore[misc] + image=image, + prompt=prompt, + background=background, # type: ignore[arg-type] + input_fidelity=input_fidelity, # type: ignore[arg-type] + mask=mask, + model=model, + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + data = ImagesResponse(**json.loads(response.text)) + data._headers = response.headers + + return data @overload async def generate( @@ -439,7 +516,7 @@ async def generate( style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> OpenAIImagesResponse: + ) -> Union[OpenAIImagesResponse, ImagesResponse]: ... @overload @@ -483,7 +560,7 @@ async def generate( style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, AsyncStream[ImageGenStreamEvent]]: + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageGenStreamEvent], ImagesResponse]: ... async def generate( @@ -506,29 +583,54 @@ async def generate( style: Union[Optional[str], NotGiven] = NOT_GIVEN, user: Union[str, NotGiven] = NOT_GIVEN, **kwargs - ) -> Union[OpenAIImagesResponse, AsyncStream[ImageGenStreamEvent]]: + ) -> Union[OpenAIImagesResponse, AsyncStream[ImageGenStreamEvent], ImagesResponse]: extra_headers = kwargs.pop("extra_headers", None) extra_query = kwargs.pop("extra_query", None) extra_body = kwargs.pop("extra_body", None) timeout = kwargs.pop("timeout", None) - return await self.openai_client.images.generate( # type: ignore[misc] - prompt=prompt, - background=background, # type: ignore[arg-type] - model=model, - moderation=moderation, # type: ignore[arg-type] - n=n, - output_compression=output_compression, - output_format=output_format, # type: ignore[arg-type] - partial_images=partial_images, - quality=quality, # type: ignore[arg-type] - response_format=response_format, # type: ignore[arg-type] - size=size, # type: ignore[arg-type] - stream=stream, # type: ignore[arg-type] - style=style, # type: ignore[arg-type] - user=user, - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - ) + if stream: + return await self.openai_client.images.generate( # type: ignore[misc] + prompt=prompt, + background=background, # type: ignore[arg-type] + model=model, + moderation=moderation, # type: ignore[arg-type] + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + stream=stream, # type: ignore[arg-type] + style=style, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + else: + response = await self.openai_client.with_raw_response.images.generate( # type: ignore[misc] + prompt=prompt, + background=background, # type: ignore[arg-type] + model=model, + moderation=moderation, # type: ignore[arg-type] + n=n, + output_compression=output_compression, + output_format=output_format, # type: ignore[arg-type] + partial_images=partial_images, + quality=quality, # type: ignore[arg-type] + response_format=response_format, # type: ignore[arg-type] + size=size, # type: ignore[arg-type] + style=style, # type: ignore[arg-type] + user=user, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + data = ImagesResponse(**json.loads(response.text)) + data._headers = response.headers + + return data From 17c5905a378b721d083c7938ebcc3f98582893f6 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Tue, 12 Aug 2025 20:10:51 +0530 Subject: [PATCH 10/14] feat: files from vendor oai 1.99.6 --- .../INSTALLER | 0 .../METADATA | 127 +- .../RECORD | 1762 +++++++++-------- .../REQUESTED | 0 .../WHEEL | 0 .../entry_points.txt | 0 .../licenses/LICENSE | 0 portkey_ai/_vendor/openai/__init__.py | 20 +- portkey_ai/_vendor/openai/_client.py | 37 + portkey_ai/_vendor/openai/_exceptions.py | 5 + portkey_ai/_vendor/openai/_files.py | 8 +- portkey_ai/_vendor/openai/_models.py | 36 +- portkey_ai/_vendor/openai/_module_client.py | 8 + portkey_ai/_vendor/openai/_streaming.py | 28 +- portkey_ai/_vendor/openai/_version.py | 2 +- portkey_ai/_vendor/openai/cli/_api/_main.py | 3 +- .../openai/cli/_api/fine_tuning/__init__.py | 13 + .../openai/cli/_api/fine_tuning/jobs.py | 169 ++ .../openai/lib/_parsing/_completions.py | 67 +- .../_vendor/openai/lib/_parsing/_responses.py | 1 + portkey_ai/_vendor/openai/lib/_tools.py | 4 +- portkey_ai/_vendor/openai/lib/azure.py | 14 + .../openai/lib/streaming/chat/_completions.py | 18 +- .../openai/lib/streaming/responses/_events.py | 16 +- .../lib/streaming/responses/_responses.py | 2 + .../_vendor/openai/resources/audio/speech.py | 22 +- .../openai/resources/beta/assistants.py | 48 +- .../_vendor/openai/resources/beta/beta.py | 2 +- .../openai/resources/beta/chat/__init__.py | 11 - .../openai/resources/beta/chat/chat.py | 21 - .../openai/resources/beta/chat/completions.py | 634 ------ .../resources/beta/realtime/sessions.py | 14 +- .../resources/beta/threads/runs/runs.py | 54 +- .../resources/chat/completions/completions.py | 1032 ++++++++-- .../_vendor/openai/resources/embeddings.py | 6 + .../openai/resources/fine_tuning/jobs/jobs.py | 20 +- portkey_ai/_vendor/openai/resources/images.py | 1531 ++++++++++++-- .../openai/resources/responses/responses.py | 891 ++++++--- .../_vendor/openai/resources/webhooks.py | 210 ++ portkey_ai/_vendor/openai/types/__init__.py | 9 + .../types/audio/speech_create_params.py | 16 +- .../openai/types/audio/transcription.py | 45 +- .../audio/transcription_text_done_event.py | 30 +- .../types/audio/transcription_verbose.py | 14 +- .../types/beta/assistant_create_params.py | 8 +- .../types/beta/assistant_update_params.py | 14 +- .../types/beta/realtime/conversation_item.py | 4 +- .../realtime/conversation_item_content.py | 9 +- .../conversation_item_content_param.py | 9 +- .../conversation_item_created_event.py | 12 +- ...put_audio_transcription_completed_event.py | 52 +- .../beta/realtime/conversation_item_param.py | 4 +- .../conversation_item_with_reference.py | 30 +- .../conversation_item_with_reference_param.py | 29 +- .../input_audio_buffer_committed_event.py | 10 +- .../types/beta/realtime/realtime_response.py | 13 +- .../beta/realtime/response_create_event.py | 8 +- .../realtime/response_create_event_param.py | 6 +- .../openai/types/beta/realtime/session.py | 8 +- .../beta/realtime/session_create_params.py | 16 +- .../beta/realtime/session_create_response.py | 17 +- .../beta/realtime/session_update_event.py | 16 +- .../realtime/session_update_event_param.py | 14 +- .../types/beta/threads/run_create_params.py | 8 +- .../_vendor/openai/types/chat/__init__.py | 26 +- .../openai/types/chat/chat_completion.py | 33 +- ...at_completion_allowed_tool_choice_param.py | 17 + .../chat_completion_allowed_tools_param.py | 32 + .../types/chat/chat_completion_audio_param.py | 6 +- .../types/chat/chat_completion_chunk.py | 33 +- .../chat_completion_content_part_image.py | 27 + .../chat/chat_completion_content_part_text.py | 15 + .../chat/chat_completion_custom_tool_param.py | 58 + ...ol.py => chat_completion_function_tool.py} | 4 +- .../chat_completion_function_tool_param.py | 16 + ...hat_completion_message_custom_tool_call.py | 26 + ...mpletion_message_custom_tool_call_param.py | 26 + ...t_completion_message_function_tool_call.py | 31 + ...letion_message_function_tool_call_param.py | 31 + .../chat/chat_completion_message_tool_call.py | 34 +- ...chat_completion_message_tool_call_param.py | 32 +- ...mpletion_named_tool_choice_custom_param.py | 19 + ...chat_completion_named_tool_choice_param.py | 2 +- .../chat/chat_completion_store_message.py | 15 +- .../chat_completion_stream_options_param.py | 11 + ...hat_completion_tool_choice_option_param.py | 7 +- .../types/chat/chat_completion_tool_param.py | 16 +- .../chat/chat_completion_tool_union_param.py | 13 + .../types/chat/completion_create_params.py | 84 +- .../types/chat/parsed_function_tool_call.py | 4 +- .../openai/types/eval_create_params.py | 23 +- ...create_eval_completions_run_data_source.py | 27 +- ..._eval_completions_run_data_source_param.py | 27 +- .../openai/types/evals/run_cancel_response.py | 23 +- .../openai/types/evals/run_create_params.py | 21 +- .../openai/types/evals/run_create_response.py | 23 +- .../openai/types/evals/run_list_response.py | 23 +- .../types/evals/run_retrieve_response.py | 23 +- .../_vendor/openai/types/file_object.py | 11 +- .../types/fine_tuning/job_create_params.py | 6 +- .../types/graders/label_model_grader.py | 20 +- .../types/graders/label_model_grader_param.py | 22 +- .../types/graders/score_model_grader.py | 20 +- .../types/graders/score_model_grader_param.py | 22 +- .../types/image_edit_completed_event.py | 55 + .../_vendor/openai/types/image_edit_params.py | 59 +- .../types/image_edit_partial_image_event.py | 33 + .../openai/types/image_edit_stream_event.py | 14 + .../openai/types/image_gen_completed_event.py | 55 + .../types/image_gen_partial_image_event.py | 33 + .../openai/types/image_gen_stream_event.py | 14 + .../openai/types/image_generate_params.py | 38 +- .../_vendor/openai/types/images_response.py | 21 +- .../openai/types/responses/__init__.py | 31 +- .../openai/types/responses/custom_tool.py | 23 + .../types/responses/custom_tool_param.py | 23 + .../openai/types/responses/parsed_response.py | 2 + .../openai/types/responses/response.py | 102 +- ..._code_interpreter_call_code_delta_event.py | 12 +- ...e_code_interpreter_call_code_done_event.py | 7 +- ...e_code_interpreter_call_completed_event.py | 12 +- ...code_interpreter_call_in_progress_event.py | 12 +- ...ode_interpreter_call_interpreting_event.py | 12 +- .../response_code_interpreter_tool_call.py | 52 +- ...sponse_code_interpreter_tool_call_param.py | 54 +- .../types/responses/response_create_params.py | 169 +- .../responses/response_custom_tool_call.py | 25 + ...onse_custom_tool_call_input_delta_event.py | 24 + ...ponse_custom_tool_call_input_done_event.py | 24 + .../response_custom_tool_call_output.py | 22 + .../response_custom_tool_call_output_param.py | 21 + .../response_custom_tool_call_param.py | 24 + .../responses/response_function_web_search.py | 42 +- .../response_function_web_search_param.py | 41 +- .../types/responses/response_includable.py | 5 +- .../types/responses/response_input_file.py | 3 + .../responses/response_input_file_param.py | 3 + .../types/responses/response_input_item.py | 309 +++ .../responses/response_input_item_param.py | 4 + .../types/responses/response_input_param.py | 4 + ...response_mcp_call_arguments_delta_event.py | 11 +- .../response_mcp_call_arguments_done_event.py | 8 +- .../response_mcp_call_completed_event.py | 6 + .../response_mcp_call_failed_event.py | 6 + ...response_mcp_list_tools_completed_event.py | 6 + .../response_mcp_list_tools_failed_event.py | 6 + ...sponse_mcp_list_tools_in_progress_event.py | 6 + .../types/responses/response_output_item.py | 2 + .../responses/response_output_refusal.py | 2 +- .../response_output_refusal_param.py | 2 +- .../types/responses/response_output_text.py | 6 + ...onse_output_text_annotation_added_event.py | 4 +- .../responses/response_output_text_param.py | 6 + .../openai/types/responses/response_prompt.py | 28 + .../types/responses/response_prompt_param.py | 29 + .../response_reasoning_delta_event.py | 27 - .../response_reasoning_done_event.py | 27 - .../responses/response_reasoning_item.py | 19 +- .../response_reasoning_item_param.py | 19 +- .../response_reasoning_summary_delta_event.py | 30 - .../response_reasoning_summary_done_event.py | 27 - .../response_reasoning_text_delta_event.py | 27 + .../response_reasoning_text_done_event.py | 27 + .../responses/response_retrieve_params.py | 11 + .../types/responses/response_stream_event.py | 16 +- .../types/responses/response_text_config.py | 9 + .../responses/response_text_config_param.py | 11 +- .../responses/response_text_delta_event.py | 25 +- .../responses/response_text_done_event.py | 25 +- .../_vendor/openai/types/responses/tool.py | 23 +- .../types/responses/tool_choice_allowed.py | 36 + .../responses/tool_choice_allowed_param.py | 36 + .../types/responses/tool_choice_custom.py | 15 + .../responses/tool_choice_custom_param.py | 15 + .../openai/types/responses/tool_choice_mcp.py | 19 + .../types/responses/tool_choice_mcp_param.py | 19 + .../types/responses/tool_choice_types.py | 2 - .../responses/tool_choice_types_param.py | 2 - .../openai/types/responses/tool_param.py | 16 +- .../_vendor/openai/types/shared/__init__.py | 3 + .../_vendor/openai/types/shared/all_models.py | 4 + .../_vendor/openai/types/shared/chat_model.py | 7 + .../types/shared/custom_tool_input_format.py | 28 + .../types/shared/function_definition.py | 2 +- .../_vendor/openai/types/shared/reasoning.py | 8 +- .../openai/types/shared/reasoning_effort.py | 2 +- .../shared/response_format_text_grammar.py | 15 + .../shared/response_format_text_python.py | 12 + .../openai/types/shared/responses_model.py | 4 + .../openai/types/shared_params/__init__.py | 1 + .../openai/types/shared_params/chat_model.py | 7 + .../shared_params/custom_tool_input_format.py | 27 + .../shared_params/function_definition.py | 2 +- .../openai/types/shared_params/reasoning.py | 8 +- .../types/shared_params/reasoning_effort.py | 2 +- .../types/shared_params/responses_model.py | 4 + .../types/vector_store_search_params.py | 3 +- .../_vendor/openai/types/webhooks/__init__.py | 23 + .../webhooks/batch_cancelled_webhook_event.py | 30 + .../webhooks/batch_completed_webhook_event.py | 30 + .../webhooks/batch_expired_webhook_event.py | 30 + .../webhooks/batch_failed_webhook_event.py | 30 + .../eval_run_canceled_webhook_event.py | 30 + .../webhooks/eval_run_failed_webhook_event.py | 30 + .../eval_run_succeeded_webhook_event.py | 30 + ...fine_tuning_job_cancelled_webhook_event.py | 30 + .../fine_tuning_job_failed_webhook_event.py | 30 + ...fine_tuning_job_succeeded_webhook_event.py | 30 + .../response_cancelled_webhook_event.py | 30 + .../response_completed_webhook_event.py | 30 + .../webhooks/response_failed_webhook_event.py | 30 + .../response_incomplete_webhook_event.py | 30 + .../types/webhooks/unwrap_webhook_event.py | 42 + 213 files changed, 7853 insertions(+), 2912 deletions(-) rename portkey_ai/_vendor/{openai-1.86.0.dist-info => openai-1.99.6.dist-info}/INSTALLER (100%) rename portkey_ai/_vendor/{openai-1.86.0.dist-info => openai-1.99.6.dist-info}/METADATA (86%) rename portkey_ai/_vendor/{openai-1.86.0.dist-info => openai-1.99.6.dist-info}/RECORD (68%) rename portkey_ai/_vendor/{openai-1.86.0.dist-info => openai-1.99.6.dist-info}/REQUESTED (100%) rename portkey_ai/_vendor/{openai-1.86.0.dist-info => openai-1.99.6.dist-info}/WHEEL (100%) rename portkey_ai/_vendor/{openai-1.86.0.dist-info => openai-1.99.6.dist-info}/entry_points.txt (100%) rename portkey_ai/_vendor/{openai-1.86.0.dist-info => openai-1.99.6.dist-info}/licenses/LICENSE (100%) create mode 100644 portkey_ai/_vendor/openai/cli/_api/fine_tuning/__init__.py create mode 100644 portkey_ai/_vendor/openai/cli/_api/fine_tuning/jobs.py delete mode 100644 portkey_ai/_vendor/openai/resources/beta/chat/__init__.py delete mode 100644 portkey_ai/_vendor/openai/resources/beta/chat/chat.py delete mode 100644 portkey_ai/_vendor/openai/resources/beta/chat/completions.py create mode 100644 portkey_ai/_vendor/openai/resources/webhooks.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tool_choice_param.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tools_param.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_image.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_text.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_custom_tool_param.py rename portkey_ai/_vendor/openai/types/chat/{chat_completion_tool.py => chat_completion_function_tool.py} (80%) create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_function_tool_param.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call_param.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call_param.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_custom_param.py create mode 100644 portkey_ai/_vendor/openai/types/chat/chat_completion_tool_union_param.py create mode 100644 portkey_ai/_vendor/openai/types/image_edit_completed_event.py create mode 100644 portkey_ai/_vendor/openai/types/image_edit_partial_image_event.py create mode 100644 portkey_ai/_vendor/openai/types/image_edit_stream_event.py create mode 100644 portkey_ai/_vendor/openai/types/image_gen_completed_event.py create mode 100644 portkey_ai/_vendor/openai/types/image_gen_partial_image_event.py create mode 100644 portkey_ai/_vendor/openai/types/image_gen_stream_event.py create mode 100644 portkey_ai/_vendor/openai/types/responses/custom_tool.py create mode 100644 portkey_ai/_vendor/openai/types/responses/custom_tool_param.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_custom_tool_call.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_delta_event.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_done_event.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output_param.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_param.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_input_item.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_prompt.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_prompt_param.py delete mode 100644 portkey_ai/_vendor/openai/types/responses/response_reasoning_delta_event.py delete mode 100644 portkey_ai/_vendor/openai/types/responses/response_reasoning_done_event.py delete mode 100644 portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_delta_event.py delete mode 100644 portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_done_event.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_reasoning_text_delta_event.py create mode 100644 portkey_ai/_vendor/openai/types/responses/response_reasoning_text_done_event.py create mode 100644 portkey_ai/_vendor/openai/types/responses/tool_choice_allowed.py create mode 100644 portkey_ai/_vendor/openai/types/responses/tool_choice_allowed_param.py create mode 100644 portkey_ai/_vendor/openai/types/responses/tool_choice_custom.py create mode 100644 portkey_ai/_vendor/openai/types/responses/tool_choice_custom_param.py create mode 100644 portkey_ai/_vendor/openai/types/responses/tool_choice_mcp.py create mode 100644 portkey_ai/_vendor/openai/types/responses/tool_choice_mcp_param.py create mode 100644 portkey_ai/_vendor/openai/types/shared/custom_tool_input_format.py create mode 100644 portkey_ai/_vendor/openai/types/shared/response_format_text_grammar.py create mode 100644 portkey_ai/_vendor/openai/types/shared/response_format_text_python.py create mode 100644 portkey_ai/_vendor/openai/types/shared_params/custom_tool_input_format.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/__init__.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/batch_cancelled_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/batch_completed_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/batch_expired_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/batch_failed_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/eval_run_canceled_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/eval_run_failed_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/eval_run_succeeded_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_cancelled_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_failed_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_succeeded_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/response_cancelled_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/response_completed_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/response_failed_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/response_incomplete_webhook_event.py create mode 100644 portkey_ai/_vendor/openai/types/webhooks/unwrap_webhook_event.py diff --git a/portkey_ai/_vendor/openai-1.86.0.dist-info/INSTALLER b/portkey_ai/_vendor/openai-1.99.6.dist-info/INSTALLER similarity index 100% rename from portkey_ai/_vendor/openai-1.86.0.dist-info/INSTALLER rename to portkey_ai/_vendor/openai-1.99.6.dist-info/INSTALLER diff --git a/portkey_ai/_vendor/openai-1.86.0.dist-info/METADATA b/portkey_ai/_vendor/openai-1.99.6.dist-info/METADATA similarity index 86% rename from portkey_ai/_vendor/openai-1.86.0.dist-info/METADATA rename to portkey_ai/_vendor/openai-1.99.6.dist-info/METADATA index 7a45185e..136f87bf 100644 --- a/portkey_ai/_vendor/openai-1.86.0.dist-info/METADATA +++ b/portkey_ai/_vendor/openai-1.99.6.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.3 Name: openai -Version: 1.86.0 +Version: 1.99.6 Summary: The official Python library for the openai API Project-URL: Homepage, https://github.com/openai/openai-python Project-URL: Repository, https://github.com/openai/openai-python @@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Typing :: Typed Requires-Python: >=3.8 @@ -29,6 +30,9 @@ Requires-Dist: pydantic<3,>=1.9.0 Requires-Dist: sniffio Requires-Dist: tqdm>4 Requires-Dist: typing-extensions<5,>=4.11 +Provides-Extra: aiohttp +Requires-Dist: aiohttp; extra == 'aiohttp' +Requires-Dist: httpx-aiohttp>=0.1.8; extra == 'aiohttp' Provides-Extra: datalib Requires-Dist: numpy>=1; extra == 'datalib' Requires-Dist: pandas-stubs>=1.1.0.11; extra == 'datalib' @@ -42,7 +46,8 @@ Description-Content-Type: text/markdown # OpenAI Python API library -[![PyPI version](https://img.shields.io/pypi/v/openai.svg)](https://pypi.org/project/openai/) + +[![PyPI version](https://img.shields.io/pypi/v/openai.svg?label=pypi%20(stable))](https://pypi.org/project/openai/) The OpenAI Python library provides convenient access to the OpenAI REST API from any Python 3.8+ application. The library includes type definitions for all request params and response fields, @@ -187,6 +192,44 @@ asyncio.run(main()) Functionality between the synchronous and asynchronous clients is otherwise identical. +### With aiohttp + +By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend. + +You can enable this by installing `aiohttp`: + +```sh +# install from PyPI +pip install openai[aiohttp] +``` + +Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`: + +```python +import asyncio +from openai import DefaultAioHttpClient +from openai import AsyncOpenAI + + +async def main() -> None: + async with AsyncOpenAI( + api_key="My API Key", + http_client=DefaultAioHttpClient(), + ) as client: + chat_completion = await client.chat.completions.create( + messages=[ + { + "role": "user", + "content": "Say this is a test", + } + ], + model="gpt-4o", + ) + + +asyncio.run(main()) +``` + ## Streaming responses We provide support for streaming responses using Server Side Events (SSE). @@ -409,6 +452,86 @@ client.files.create( The async client uses the exact same interface. If you pass a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance, the file contents will be read asynchronously automatically. +## Webhook Verification + +Verifying webhook signatures is _optional but encouraged_. + +For more information about webhooks, see [the API docs](https://platform.openai.com/docs/guides/webhooks). + +### Parsing webhook payloads + +For most use cases, you will likely want to verify the webhook and parse the payload at the same time. To achieve this, we provide the method `client.webhooks.unwrap()`, which parses a webhook request and verifies that it was sent by OpenAI. This method will raise an error if the signature is invalid. + +Note that the `body` parameter must be the raw JSON string sent from the server (do not parse it first). The `.unwrap()` method will parse this JSON for you into an event object after verifying the webhook was sent from OpenAI. + +```python +from openai import OpenAI +from flask import Flask, request + +app = Flask(__name__) +client = OpenAI() # OPENAI_WEBHOOK_SECRET environment variable is used by default + + +@app.route("/webhook", methods=["POST"]) +def webhook(): + request_body = request.get_data(as_text=True) + + try: + event = client.webhooks.unwrap(request_body, request.headers) + + if event.type == "response.completed": + print("Response completed:", event.data) + elif event.type == "response.failed": + print("Response failed:", event.data) + else: + print("Unhandled event type:", event.type) + + return "ok" + except Exception as e: + print("Invalid signature:", e) + return "Invalid signature", 400 + + +if __name__ == "__main__": + app.run(port=8000) +``` + +### Verifying webhook payloads directly + +In some cases, you may want to verify the webhook separately from parsing the payload. If you prefer to handle these steps separately, we provide the method `client.webhooks.verify_signature()` to _only verify_ the signature of a webhook request. Like `.unwrap()`, this method will raise an error if the signature is invalid. + +Note that the `body` parameter must be the raw JSON string sent from the server (do not parse it first). You will then need to parse the body after verifying the signature. + +```python +import json +from openai import OpenAI +from flask import Flask, request + +app = Flask(__name__) +client = OpenAI() # OPENAI_WEBHOOK_SECRET environment variable is used by default + + +@app.route("/webhook", methods=["POST"]) +def webhook(): + request_body = request.get_data(as_text=True) + + try: + client.webhooks.verify_signature(request_body, request.headers) + + # Parse the body after verification + event = json.loads(request_body) + print("Verified event:", event) + + return "ok" + except Exception as e: + print("Invalid signature:", e) + return "Invalid signature", 400 + + +if __name__ == "__main__": + app.run(port=8000) +``` + ## Handling errors When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `openai.APIConnectionError` is raised. diff --git a/portkey_ai/_vendor/openai-1.86.0.dist-info/RECORD b/portkey_ai/_vendor/openai-1.99.6.dist-info/RECORD similarity index 68% rename from portkey_ai/_vendor/openai-1.86.0.dist-info/RECORD rename to portkey_ai/_vendor/openai-1.99.6.dist-info/RECORD index efe75eaa..cd322ed5 100644 --- a/portkey_ai/_vendor/openai-1.86.0.dist-info/RECORD +++ b/portkey_ai/_vendor/openai-1.99.6.dist-info/RECORD @@ -1,704 +1,757 @@ -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/__main__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_base_client.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_client.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_compat.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_constants.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_exceptions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_extras/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_extras/_common.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_extras/numpy_proxy.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_extras/pandas_proxy.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_extras/sounddevice_proxy.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_files.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_legacy_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_models.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_module_client.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_qs.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_resource.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_streaming.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_types.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_logs.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_proxy.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_reflection.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_resources_proxy.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_streams.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_sync.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_transform.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_typing.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_utils/_utils.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/_version.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/_main.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/audio.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/chat/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/chat/completions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/completions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/files.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/image.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_api/models.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_cli.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_errors.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_models.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_progress.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_tools/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_tools/_main.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_tools/fine_tunes.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_tools/migrate.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/cli/_utils.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/helpers/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/helpers/local_audio_player.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/helpers/microphone.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/_old_api.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/_parsing/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/_parsing/_completions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/_parsing/_responses.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/_pydantic.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/_tools.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/_validators.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/azure.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/_assistants.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/_deltas.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/chat/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/chat/_completions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/chat/_events.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/chat/_types.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/responses/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/responses/_events.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/responses/_responses.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/lib/streaming/responses/_types.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/pagination.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/audio/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/audio/audio.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/audio/speech.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/audio/transcriptions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/audio/translations.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/batches.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/assistants.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/beta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/chat/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/chat/chat.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/chat/completions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/realtime/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/realtime/realtime.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/realtime/sessions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/realtime/transcription_sessions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/threads/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/threads/messages.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/threads/runs/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/threads/runs/runs.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/threads/runs/steps.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/beta/threads/threads.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/chat/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/chat/chat.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/chat/completions/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/chat/completions/completions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/chat/completions/messages.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/completions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/containers/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/containers/containers.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/containers/files/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/containers/files/content.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/containers/files/files.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/embeddings.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/evals/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/evals/evals.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/evals/runs/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/evals/runs/output_items.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/evals/runs/runs.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/files.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/alpha/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/alpha/alpha.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/alpha/graders.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/checkpoints/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/checkpoints/checkpoints.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/checkpoints/permissions.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/fine_tuning.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/jobs/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/jobs/checkpoints.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/fine_tuning/jobs/jobs.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/images.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/models.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/moderations.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/responses/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/responses/input_items.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/responses/responses.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/uploads/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/uploads/parts.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/uploads/uploads.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/vector_stores/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/vector_stores/file_batches.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/vector_stores/files.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/resources/vector_stores/vector_stores.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/speech_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/speech_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_include.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_segment.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_stream_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_text_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_text_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_verbose.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/transcription_word.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/translation.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/translation_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/translation_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio/translation_verbose.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/audio_response_format.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/auto_file_chunking_strategy_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/batch.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/batch_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/batch_error.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/batch_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/batch_request_counts.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_response_format_option.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_response_format_option_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_stream_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool_choice.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool_choice_function.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool_choice_function_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool_choice_option.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool_choice_option_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool_choice_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/assistant_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/chat/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/code_interpreter_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/code_interpreter_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/file_search_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/file_search_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/function_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/function_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_created_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_content.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_content_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_create_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_create_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_created_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_delete_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_delete_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_deleted_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_input_audio_transcription_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_input_audio_transcription_failed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_retrieve_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_retrieve_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_truncate_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_truncate_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_truncated_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_with_reference.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/conversation_item_with_reference_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/error_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_append_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_append_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_clear_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_clear_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_cleared_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_commit_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_commit_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_committed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_speech_started_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/input_audio_buffer_speech_stopped_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/rate_limits_updated_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/realtime_client_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/realtime_client_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/realtime_connect_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/realtime_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/realtime_response_status.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/realtime_response_usage.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/realtime_server_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_audio_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_audio_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_audio_transcript_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_audio_transcript_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_cancel_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_cancel_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_content_part_added_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_content_part_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_create_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_create_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_created_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_function_call_arguments_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_function_call_arguments_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_output_item_added_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_output_item_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_text_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/response_text_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/session.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/session_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/session_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/session_created_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/session_update_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/session_update_event_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/session_updated_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/transcription_session.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/transcription_session_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/transcription_session_update.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/transcription_session_update_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/realtime/transcription_session_updated_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/thread.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/thread_create_and_run_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/thread_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/thread_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/thread_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/annotation.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/annotation_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/file_citation_annotation.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/file_citation_delta_annotation.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/file_path_annotation.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/file_path_delta_annotation.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_file.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_file_content_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_file_content_block_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_file_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_file_delta_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_file_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_url.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_url_content_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_url_content_block_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_url_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_url_delta_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/image_url_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_content.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_content_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_content_part_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/message_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/refusal_content_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/refusal_delta_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/required_action_function_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/run.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/run_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/run_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/run_status.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/run_submit_tool_outputs_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/run_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/code_interpreter_logs.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/code_interpreter_output_image.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/code_interpreter_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/code_interpreter_tool_call_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/file_search_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/file_search_tool_call_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/function_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/function_tool_call_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/message_creation_step_details.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/run_step.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/run_step_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/run_step_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/run_step_delta_message_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/run_step_include.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/step_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/step_retrieve_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/tool_call_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/tool_call_delta_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/runs/tool_calls_step_details.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/text.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/text_content_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/text_content_block_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/text_delta.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/beta/threads/text_delta_block.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_assistant_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_audio.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_audio_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_chunk.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_content_part_image_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_content_part_input_audio_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_content_part_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_content_part_refusal_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_content_part_text_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_developer_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_function_call_option_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_function_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_message.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_message_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_message_tool_call_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_modality.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_named_tool_choice_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_prediction_content_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_reasoning_effort.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_role.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_store_message.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_stream_options_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_system_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_token_logprob.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_tool_choice_option_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_tool_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/chat_completion_user_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/completion_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/completion_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/completion_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/completions/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/completions/message_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/parsed_chat_completion.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat/parsed_function_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/chat_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/completion.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/completion_choice.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/completion_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/completion_usage.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/container_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/container_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/container_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/container_list_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/container_retrieve_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/containers/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/containers/file_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/containers/file_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/containers/file_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/containers/file_list_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/containers/file_retrieve_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/containers/files/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/create_embedding_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/embedding.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/embedding_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/embedding_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_custom_data_source_config.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_delete_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_list_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_retrieve_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_stored_completions_data_source_config.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/eval_update_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/create_eval_completions_run_data_source.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/create_eval_completions_run_data_source_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/create_eval_jsonl_run_data_source.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/create_eval_jsonl_run_data_source_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/eval_api_error.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/run_cancel_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/run_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/run_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/run_delete_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/run_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/run_list_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/run_retrieve_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/runs/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/runs/output_item_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/runs/output_item_list_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/evals/runs/output_item_retrieve_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_chunking_strategy.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_chunking_strategy_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_content.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/file_purpose.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/alpha/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/alpha/grader_run_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/alpha/grader_run_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/alpha/grader_validate_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/alpha/grader_validate_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/checkpoints/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/checkpoints/permission_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/checkpoints/permission_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/checkpoints/permission_delete_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/checkpoints/permission_retrieve_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/checkpoints/permission_retrieve_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/dpo_hyperparameters.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/dpo_hyperparameters_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/dpo_method.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/dpo_method_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/fine_tuning_job.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/fine_tuning_job_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/fine_tuning_job_integration.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/fine_tuning_job_wandb_integration.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/fine_tuning_job_wandb_integration_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/job_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/job_list_events_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/job_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/jobs/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/jobs/checkpoint_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/jobs/fine_tuning_job_checkpoint.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/reinforcement_hyperparameters.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/reinforcement_hyperparameters_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/reinforcement_method.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/reinforcement_method_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/supervised_hyperparameters.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/supervised_hyperparameters_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/supervised_method.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/fine_tuning/supervised_method_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/label_model_grader.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/label_model_grader_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/multi_grader.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/multi_grader_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/python_grader.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/python_grader_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/score_model_grader.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/score_model_grader_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/string_check_grader.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/string_check_grader_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/text_similarity_grader.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/graders/text_similarity_grader_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/image.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/image_create_variation_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/image_edit_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/image_generate_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/image_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/images_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/model_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/moderation.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/moderation_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/moderation_create_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/moderation_image_url_input_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/moderation_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/moderation_multi_modal_input_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/moderation_text_input_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/other_file_chunking_strategy_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/computer_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/computer_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/easy_input_message.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/easy_input_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/file_search_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/file_search_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/function_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/function_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/input_item_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/parsed_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_audio_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_audio_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_audio_transcript_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_audio_transcript_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_code_interpreter_call_code_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_code_interpreter_call_code_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_code_interpreter_call_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_code_interpreter_call_in_progress_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_code_interpreter_call_interpreting_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_code_interpreter_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_code_interpreter_tool_call_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_computer_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_computer_tool_call_output_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_computer_tool_call_output_screenshot.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_computer_tool_call_output_screenshot_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_computer_tool_call_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_content_part_added_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_content_part_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_created_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_error.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_error_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_failed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_file_search_call_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_file_search_call_in_progress_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_file_search_call_searching_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_file_search_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_file_search_tool_call_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_format_text_config.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_format_text_config_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_format_text_json_schema_config.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_format_text_json_schema_config_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_call_arguments_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_call_arguments_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_tool_call.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_tool_call_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_tool_call_output_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_tool_call_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_web_search.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_function_web_search_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_image_gen_call_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_image_gen_call_generating_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_image_gen_call_in_progress_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_image_gen_call_partial_image_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_in_progress_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_includable.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_incomplete_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_content.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_content_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_file.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_file_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_image.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_image_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_item_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_message_content_list.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_message_content_list_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_message_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_text.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_input_text_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_item_list.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_call_arguments_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_call_arguments_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_call_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_call_failed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_call_in_progress_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_list_tools_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_list_tools_failed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_mcp_list_tools_in_progress_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_item_added_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_item_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_message.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_message_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_refusal.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_refusal_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_text.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_text_annotation_added_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_output_text_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_queued_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_item.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_item_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_summary_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_summary_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_summary_part_added_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_summary_part_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_summary_text_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_reasoning_summary_text_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_refusal_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_refusal_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_retrieve_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_status.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_stream_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_text_config.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_text_config_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_text_delta_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_text_done_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_usage.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_web_search_call_completed_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_web_search_call_in_progress_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/response_web_search_call_searching_event.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/tool_choice_function.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/tool_choice_function_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/tool_choice_options.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/tool_choice_types.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/tool_choice_types_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/web_search_tool.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/responses/web_search_tool_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/all_models.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/chat_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/comparison_filter.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/compound_filter.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/error_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/function_definition.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/function_parameters.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/metadata.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/reasoning.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/reasoning_effort.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/response_format_json_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/response_format_json_schema.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/response_format_text.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared/responses_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/chat_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/comparison_filter.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/compound_filter.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/function_definition.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/function_parameters.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/metadata.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/reasoning.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/reasoning_effort.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/response_format_json_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/response_format_json_schema.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/response_format_text.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/shared_params/responses_model.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/static_file_chunking_strategy.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/static_file_chunking_strategy_object.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/static_file_chunking_strategy_object_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/static_file_chunking_strategy_param.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/upload.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/upload_complete_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/upload_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/uploads/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/uploads/part_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/uploads/upload_part.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_store.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_store_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_store_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_store_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_store_search_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_store_search_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_store_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/__init__.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/file_batch_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/file_batch_list_files_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/file_content_response.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/file_create_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/file_list_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/file_update_params.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/vector_store_file.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/vector_store_file_batch.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/vector_stores/vector_store_file_deleted.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/types/websocket_connection_options.cpython-39.pyc,, -../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-aryzpxs8/lib/python/openai/version.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/__main__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_base_client.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_client.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_compat.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_constants.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_exceptions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_extras/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_extras/_common.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_extras/numpy_proxy.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_extras/pandas_proxy.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_extras/sounddevice_proxy.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_files.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_legacy_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_models.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_module_client.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_qs.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_resource.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_streaming.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_types.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_logs.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_proxy.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_reflection.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_resources_proxy.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_streams.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_sync.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_transform.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_typing.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_utils/_utils.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/_version.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/_main.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/audio.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/chat/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/chat/completions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/completions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/files.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/fine_tuning/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/fine_tuning/jobs.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/image.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_api/models.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_cli.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_errors.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_models.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_progress.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_tools/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_tools/_main.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_tools/fine_tunes.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_tools/migrate.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/cli/_utils.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/helpers/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/helpers/local_audio_player.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/helpers/microphone.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/_old_api.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/_parsing/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/_parsing/_completions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/_parsing/_responses.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/_pydantic.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/_tools.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/_validators.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/azure.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/_assistants.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/_deltas.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/chat/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/chat/_completions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/chat/_events.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/chat/_types.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/responses/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/responses/_events.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/responses/_responses.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/lib/streaming/responses/_types.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/pagination.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/audio/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/audio/audio.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/audio/speech.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/audio/transcriptions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/audio/translations.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/batches.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/assistants.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/beta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/realtime/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/realtime/realtime.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/realtime/sessions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/realtime/transcription_sessions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/threads/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/threads/messages.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/threads/runs/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/threads/runs/runs.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/threads/runs/steps.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/beta/threads/threads.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/chat/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/chat/chat.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/chat/completions/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/chat/completions/completions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/chat/completions/messages.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/completions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/containers/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/containers/containers.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/containers/files/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/containers/files/content.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/containers/files/files.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/embeddings.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/evals/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/evals/evals.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/evals/runs/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/evals/runs/output_items.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/evals/runs/runs.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/files.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/alpha/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/alpha/alpha.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/alpha/graders.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/checkpoints/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/checkpoints/checkpoints.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/checkpoints/permissions.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/fine_tuning.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/jobs/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/jobs/checkpoints.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/fine_tuning/jobs/jobs.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/images.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/models.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/moderations.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/responses/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/responses/input_items.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/responses/responses.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/uploads/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/uploads/parts.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/uploads/uploads.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/vector_stores/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/vector_stores/file_batches.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/vector_stores/files.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/vector_stores/vector_stores.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/resources/webhooks.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/speech_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/speech_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_include.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_segment.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_stream_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_text_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_text_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_verbose.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/transcription_word.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/translation.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/translation_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/translation_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio/translation_verbose.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/audio_response_format.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/auto_file_chunking_strategy_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/batch.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/batch_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/batch_error.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/batch_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/batch_request_counts.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_response_format_option.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_response_format_option_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_stream_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool_choice.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool_choice_function.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool_choice_function_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool_choice_option.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool_choice_option_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool_choice_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/assistant_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/chat/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/code_interpreter_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/code_interpreter_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/file_search_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/file_search_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/function_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/function_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_created_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_content.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_content_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_create_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_create_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_created_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_delete_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_delete_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_deleted_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_input_audio_transcription_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_input_audio_transcription_failed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_retrieve_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_retrieve_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_truncate_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_truncate_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_truncated_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_with_reference.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/conversation_item_with_reference_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/error_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_append_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_append_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_clear_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_clear_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_cleared_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_commit_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_commit_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_committed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_speech_started_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/input_audio_buffer_speech_stopped_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/rate_limits_updated_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/realtime_client_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/realtime_client_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/realtime_connect_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/realtime_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/realtime_response_status.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/realtime_response_usage.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/realtime_server_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_audio_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_audio_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_audio_transcript_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_audio_transcript_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_cancel_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_cancel_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_content_part_added_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_content_part_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_create_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_create_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_created_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_function_call_arguments_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_function_call_arguments_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_output_item_added_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_output_item_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_text_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/response_text_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/session.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/session_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/session_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/session_created_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/session_update_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/session_update_event_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/session_updated_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/transcription_session.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/transcription_session_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/transcription_session_update.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/transcription_session_update_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/realtime/transcription_session_updated_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/thread.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/thread_create_and_run_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/thread_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/thread_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/thread_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/annotation.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/annotation_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/file_citation_annotation.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/file_citation_delta_annotation.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/file_path_annotation.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/file_path_delta_annotation.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_file.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_file_content_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_file_content_block_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_file_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_file_delta_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_file_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_url.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_url_content_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_url_content_block_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_url_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_url_delta_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/image_url_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_content.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_content_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_content_part_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/message_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/refusal_content_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/refusal_delta_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/required_action_function_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/run.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/run_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/run_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/run_status.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/run_submit_tool_outputs_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/run_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/code_interpreter_logs.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/code_interpreter_output_image.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/code_interpreter_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/code_interpreter_tool_call_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/file_search_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/file_search_tool_call_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/function_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/function_tool_call_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/message_creation_step_details.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/run_step.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/run_step_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/run_step_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/run_step_delta_message_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/run_step_include.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/step_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/step_retrieve_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/tool_call_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/tool_call_delta_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/runs/tool_calls_step_details.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/text.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/text_content_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/text_content_block_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/text_delta.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/beta/threads/text_delta_block.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_allowed_tool_choice_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_allowed_tools_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_assistant_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_audio.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_audio_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_chunk.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_content_part_image.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_content_part_image_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_content_part_input_audio_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_content_part_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_content_part_refusal_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_content_part_text.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_content_part_text_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_custom_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_developer_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_function_call_option_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_function_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_function_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_function_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message_custom_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message_custom_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message_function_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message_function_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_message_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_modality.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_named_tool_choice_custom_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_named_tool_choice_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_prediction_content_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_reasoning_effort.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_role.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_store_message.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_stream_options_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_system_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_token_logprob.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_tool_choice_option_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_tool_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_tool_union_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/chat_completion_user_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/completion_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/completion_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/completion_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/completions/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/completions/message_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/parsed_chat_completion.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat/parsed_function_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/chat_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/completion.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/completion_choice.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/completion_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/completion_usage.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/container_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/container_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/container_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/container_list_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/container_retrieve_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/containers/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/containers/file_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/containers/file_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/containers/file_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/containers/file_list_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/containers/file_retrieve_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/containers/files/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/create_embedding_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/embedding.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/embedding_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/embedding_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_custom_data_source_config.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_delete_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_list_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_retrieve_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_stored_completions_data_source_config.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/eval_update_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/create_eval_completions_run_data_source.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/create_eval_completions_run_data_source_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/create_eval_jsonl_run_data_source.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/create_eval_jsonl_run_data_source_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/eval_api_error.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/run_cancel_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/run_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/run_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/run_delete_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/run_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/run_list_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/run_retrieve_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/runs/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/runs/output_item_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/runs/output_item_list_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/evals/runs/output_item_retrieve_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_chunking_strategy.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_chunking_strategy_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_content.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/file_purpose.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/alpha/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/alpha/grader_run_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/alpha/grader_run_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/alpha/grader_validate_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/alpha/grader_validate_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/checkpoints/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/checkpoints/permission_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/checkpoints/permission_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/checkpoints/permission_delete_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/checkpoints/permission_retrieve_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/checkpoints/permission_retrieve_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/dpo_hyperparameters.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/dpo_hyperparameters_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/dpo_method.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/dpo_method_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/fine_tuning_job.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/fine_tuning_job_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/fine_tuning_job_integration.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/fine_tuning_job_wandb_integration.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/fine_tuning_job_wandb_integration_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/job_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/job_list_events_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/job_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/jobs/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/jobs/checkpoint_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/jobs/fine_tuning_job_checkpoint.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/reinforcement_hyperparameters.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/reinforcement_hyperparameters_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/reinforcement_method.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/reinforcement_method_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/supervised_hyperparameters.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/supervised_hyperparameters_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/supervised_method.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/fine_tuning/supervised_method_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/label_model_grader.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/label_model_grader_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/multi_grader.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/multi_grader_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/python_grader.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/python_grader_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/score_model_grader.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/score_model_grader_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/string_check_grader.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/string_check_grader_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/text_similarity_grader.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/graders/text_similarity_grader_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_create_variation_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_edit_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_edit_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_edit_partial_image_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_edit_stream_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_gen_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_gen_partial_image_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_gen_stream_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_generate_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/image_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/images_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/model_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/moderation.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/moderation_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/moderation_create_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/moderation_image_url_input_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/moderation_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/moderation_multi_modal_input_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/moderation_text_input_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/other_file_chunking_strategy_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/computer_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/computer_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/custom_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/custom_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/easy_input_message.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/easy_input_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/file_search_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/file_search_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/function_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/function_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/input_item_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/parsed_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_audio_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_audio_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_audio_transcript_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_audio_transcript_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_code_interpreter_call_code_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_code_interpreter_call_code_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_code_interpreter_call_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_code_interpreter_call_in_progress_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_code_interpreter_call_interpreting_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_code_interpreter_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_code_interpreter_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_computer_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_computer_tool_call_output_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_computer_tool_call_output_screenshot.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_computer_tool_call_output_screenshot_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_computer_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_content_part_added_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_content_part_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_created_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_custom_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_custom_tool_call_input_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_custom_tool_call_input_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_custom_tool_call_output.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_custom_tool_call_output_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_custom_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_error.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_error_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_failed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_file_search_call_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_file_search_call_in_progress_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_file_search_call_searching_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_file_search_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_file_search_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_format_text_config.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_format_text_config_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_format_text_json_schema_config.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_format_text_json_schema_config_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_call_arguments_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_call_arguments_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_tool_call.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_tool_call_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_tool_call_output_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_tool_call_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_web_search.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_function_web_search_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_image_gen_call_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_image_gen_call_generating_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_image_gen_call_in_progress_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_image_gen_call_partial_image_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_in_progress_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_includable.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_incomplete_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_content.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_content_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_file.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_file_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_image.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_image_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_item_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_message_content_list.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_message_content_list_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_message_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_text.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_input_text_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_item_list.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_call_arguments_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_call_arguments_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_call_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_call_failed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_call_in_progress_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_list_tools_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_list_tools_failed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_mcp_list_tools_in_progress_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_item_added_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_item_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_message.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_message_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_refusal.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_refusal_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_text.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_text_annotation_added_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_output_text_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_prompt.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_prompt_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_queued_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_item.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_item_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_summary_part_added_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_summary_part_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_summary_text_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_summary_text_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_text_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_reasoning_text_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_refusal_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_refusal_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_retrieve_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_status.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_stream_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_text_config.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_text_config_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_text_delta_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_text_done_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_usage.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_web_search_call_completed_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_web_search_call_in_progress_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/response_web_search_call_searching_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_allowed.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_allowed_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_custom.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_custom_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_function.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_function_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_mcp.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_mcp_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_options.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_types.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_choice_types_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/web_search_tool.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/responses/web_search_tool_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/all_models.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/chat_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/comparison_filter.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/compound_filter.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/custom_tool_input_format.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/error_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/function_definition.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/function_parameters.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/metadata.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/reasoning.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/reasoning_effort.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/response_format_json_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/response_format_json_schema.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/response_format_text.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/response_format_text_grammar.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/response_format_text_python.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared/responses_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/chat_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/comparison_filter.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/compound_filter.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/custom_tool_input_format.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/function_definition.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/function_parameters.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/metadata.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/reasoning.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/reasoning_effort.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/response_format_json_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/response_format_json_schema.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/response_format_text.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/shared_params/responses_model.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/static_file_chunking_strategy.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/static_file_chunking_strategy_object.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/static_file_chunking_strategy_object_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/static_file_chunking_strategy_param.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/upload.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/upload_complete_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/upload_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/uploads/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/uploads/part_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/uploads/upload_part.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_store.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_store_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_store_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_store_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_store_search_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_store_search_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_store_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/file_batch_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/file_batch_list_files_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/file_content_response.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/file_create_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/file_list_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/file_update_params.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/vector_store_file.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/vector_store_file_batch.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/vector_stores/vector_store_file_deleted.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/__init__.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/batch_cancelled_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/batch_completed_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/batch_expired_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/batch_failed_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/eval_run_canceled_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/eval_run_failed_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/eval_run_succeeded_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/fine_tuning_job_cancelled_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/fine_tuning_job_failed_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/fine_tuning_job_succeeded_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/response_cancelled_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/response_completed_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/response_failed_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/response_incomplete_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/webhooks/unwrap_webhook_event.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/types/websocket_connection_options.cpython-39.pyc,, +../../../../../../../../../Users/chandeep/Library/Caches/com.apple.python/private/var/folders/9_/nx5thgw547s1zlwxzhbjtb1m0000gn/T/pip-target-f2wmeejz/lib/python/openai/version.cpython-39.pyc,, ../../bin/openai,sha256=hl2E5BbKWVfkczcW65l8G1zyeJ3Si5m9TUnp5aG8gtY,276 -openai-1.86.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -openai-1.86.0.dist-info/METADATA,sha256=cKhyhe0accRk2V0OGPq-AuQNUR1rww2ZJD0qN6G3nxw,25138 -openai-1.86.0.dist-info/RECORD,, -openai-1.86.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -openai-1.86.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87 -openai-1.86.0.dist-info/entry_points.txt,sha256=kAYhQEmziJwsKs5raYAIOvJ2LWmbz5dulEXOzsY71ro,43 -openai-1.86.0.dist-info/licenses/LICENSE,sha256=1xHtN7sZrnJJr40JO4_G6nWP01VLkqxhUAwa08wOP7k,11336 -openai/__init__.py,sha256=o-XgBBjlusJELbtJfi8w2rcdxQ3tRS2z4uvE24MTdJQ,10544 +openai-1.99.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +openai-1.99.6.dist-info/METADATA,sha256=oo9baUZpFUe4a7d1s6qZ_fPTZFwWBycqjwuUYb5KvyY,29066 +openai-1.99.6.dist-info/RECORD,, +openai-1.99.6.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +openai-1.99.6.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87 +openai-1.99.6.dist-info/entry_points.txt,sha256=kAYhQEmziJwsKs5raYAIOvJ2LWmbz5dulEXOzsY71ro,43 +openai-1.99.6.dist-info/licenses/LICENSE,sha256=1xHtN7sZrnJJr40JO4_G6nWP01VLkqxhUAwa08wOP7k,11336 +openai/__init__.py,sha256=YgP4PuTaL0UzguymG9wetHAzOXDek53vbvSZzxTH68Q,11066 openai/__main__.py,sha256=bYt9eEaoRQWdejEHFD8REx9jxVEdZptECFsV7F49Ink,30 -openai/_base_client.py,sha256=I9VcAhlRwB-wpAs3cd0UTAcEXRdGnxegT5ovz6gFuMY,66282 -openai/_client.py,sha256=xDU9TIPqxltUmI_32LFXEl12eD8mNJUdS7_sB4ecv1A,38062 +openai/_base_client.py,sha256=WeAXh1uIb2gnuq7-6IYJxJg_WJegTWk_JymmcOc7MCA,68225 +openai/_client.py,sha256=QfMtMC6n9zREQFJ_5srKHIoj8ljRco8ftUrPtvMowk4,39441 openai/_compat.py,sha256=Mtzi28qOK99ZBPcGcQqdjoUFk2MzzpqjaafjuwQ4NO0,6982 openai/_constants.py,sha256=WmCwgT4tGmFsSrltb26f3bM8ftUyFYkzh32Ny5yl-So,467 -openai/_exceptions.py,sha256=2BEuXwqce9z7X6lWLLXRqg1vOay_q-OdLz9lcj6Pluw,4798 +openai/_exceptions.py,sha256=TYcCxnfT7fln5duvVnCVJ0znuUHXSAbCT5sAMnaeKjU,5008 openai/_extras/__init__.py,sha256=sainrYWujCxIyL24wNpKfMVr-ZyBPlnSZfqXcg2S6Xg,165 openai/_extras/_common.py,sha256=NWWtgbdJsO3hQGQxaXGfVk0LjeIE5AFZ8VS_795hhMc,364 openai/_extras/numpy_proxy.py,sha256=LyTZkKDdnjz0h1SKLsphrhmXyUsJ_xEUhTFMrCf7k7g,805 openai/_extras/pandas_proxy.py,sha256=NCEt1Dqwc_0H85YdsWPDE3lPDJtYnBT8G-gJE_BCeEc,637 openai/_extras/sounddevice_proxy.py,sha256=xDoE21YGu13dSAJJkiOM9Qdb7uOIv5zskaJRX6xciEg,725 -openai/_files.py,sha256=WEf6hxJN1u3pVkdnPCpinhxCUnOV2olt4J6vLoJ_k48,3616 +openai/_files.py,sha256=cQOoF0UFpnyH5JMIdu_EvGpj_dGzH1ojtJvyX7Xwqn0,3612 openai/_legacy_response.py,sha256=fx9I0IInZY1zr2bUmpqW2ZUcL9JW2xS6S4NqFuwhdPM,16237 -openai/_models.py,sha256=htXhWuIpQf9gCHbePbd0T-DNNGAk2TDW8NO1wg2AdRw,30885 -openai/_module_client.py,sha256=5d09ESURt1WzwyyuU5UIi9Nf3fb7LZy5fOzkNX1Gu9s,4047 +openai/_models.py,sha256=WjcdU41m9cqA1BkPc39wnbPywJm7ZMW8xeQ1gO5zVFI,31754 +openai/_module_client.py,sha256=maB5wcknQe3bAyk5hA7vds8MH2cIZi1NvPRqB2-SkHE,4281 openai/_qs.py,sha256=AOkSz4rHtK4YI3ZU_kzea-zpwBUgEY8WniGmTPyEimc,4846 openai/_resource.py,sha256=IQihFzFLhGOiGSlT2dO1ESWSTg2XypgbtAldtGdTOqU,1100 openai/_response.py,sha256=zLVaMPYE1o2Tz1eS5_bnJNGMikRN1byMpMcVpW1tgIU,29510 -openai/_streaming.py,sha256=CzoTv1ialbRWDDPG5zXL-DKuS-RqW5xd8A5Ki0acC14,13254 +openai/_streaming.py,sha256=eT79w7kiXCR_PGRAC9veunVnlMKau1yP0xUMUMKagp0,13390 openai/_types.py,sha256=tXtQgR4pyal7AZ8kvCh_KC2CSwBeWiiLKBrcMgTZwJs,6296 openai/_utils/__init__.py,sha256=WnJrKMH-HJifY1H9sSTocSjuVSm4s2W_2QnIm3-wxZI,2222 openai/_utils/_logs.py,sha256=IC5iwPflwelNpJEpWsvK3up-pol5hR8k_VL9fSukk_Y,1351 @@ -710,15 +763,17 @@ openai/_utils/_sync.py,sha256=TpGLrrhRNWTJtODNE6Fup3_k7zrWm1j2RlirzBwre-0,2862 openai/_utils/_transform.py,sha256=IGkmM1m26ghH4LAIf07zhY87LXO4z00amwLz_fONgB0,15665 openai/_utils/_typing.py,sha256=D0DbbNu8GnYQTSICnTSHDGsYXj8TcAKyhejb0XcnjtY,4602 openai/_utils/_utils.py,sha256=h2TetivHt1f12-1v3MjysVaTQlCGzA33R6qzwRgNSKk,12727 -openai/_version.py,sha256=vxG_cI60yaKezQGM1F7r9wlIGE1vYlWgPBIAR8JbduA,159 +openai/_version.py,sha256=ksfdvcrtlaYLUvrKpmiz781h9u2rhppwuKNJ4aAv9Sw,159 openai/cli/__init__.py,sha256=soGgtqyomgddl92H0KJRqHqGuaXIaghq86qkzLuVp7U,31 openai/cli/_api/__init__.py,sha256=cj92MZq-9_1PQM8A4TQVsqKn5mcTDAGxHllJ0UvJOPE,58 -openai/cli/_api/_main.py,sha256=5yyfLURqCEaAN8B61gHaqVAaYgtyb9Xq0ncQ3P2BAh0,451 +openai/cli/_api/_main.py,sha256=3xVyycq-4HEYMBdMDJFk893PTXpr8yvkGL3eCiuSx8E,501 openai/cli/_api/audio.py,sha256=IPbABMwryQ0CQTF4gi6VS3hJi6qFjoyj6IDV2ZoPT6A,3787 openai/cli/_api/chat/__init__.py,sha256=MhFUQH9F6QCtbPMlbsU_DWTd7wc5DSCZ7Wy3FBGVij0,300 openai/cli/_api/chat/completions.py,sha256=GyfAo3B2w2ySV0dK9D2IIVA4fOb0zqJZadQ-Yc8a_yU,5536 openai/cli/_api/completions.py,sha256=ysOmnbXpFz3VB5N_5USPdObiYew62vEn6rMtNFwTJGQ,6412 openai/cli/_api/files.py,sha256=6nKXFnsC2QE0bGnVUAG7BTLSu6K1_MhPE0ZJACmzgRY,2345 +openai/cli/_api/fine_tuning/__init__.py,sha256=hZeWhTZtIRAl1xgSbznjpCYy9lnUUXngh8uEIbVn__Y,286 +openai/cli/_api/fine_tuning/jobs.py,sha256=EQb7AeXUi-qkm7Vgru-z2usGTAlkjCDFwzo-8bFyY2I,5359 openai/cli/_api/image.py,sha256=ovBExdn8oUK9ImOpsPafesfAlmcftLP2p7d37hcUtKU,5062 openai/cli/_api/models.py,sha256=pGmIGZToj3raGGpKvPSq_EVUR-dqg4Vi0PNfZH98D2E,1295 openai/cli/_cli.py,sha256=o6zWCnq84u-DIGZuR9YoOUxTGTpx-oCU5mgAKDi555c,6779 @@ -737,52 +792,49 @@ openai/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224 openai/lib/__init__.py,sha256=BMTfMnlbugMgDA1STDIAlx4bI4t4l_8bQmJxd0th0n8,126 openai/lib/_old_api.py,sha256=XZnXBrEKuTd70iJirj5mGW35fZoqruJobbBTq6bvg10,1947 openai/lib/_parsing/__init__.py,sha256=wS3BYvMGj9TqiPqOe3rO1sleaAJqHVuCaQuCE5rZIUw,539 -openai/lib/_parsing/_completions.py,sha256=S_I--5LD9D672rBQV44uVhWUdvnvwNfwjj7fBkfosBQ,9150 -openai/lib/_parsing/_responses.py,sha256=5Fnj5PA4ob3HhJ8QM_8CgJXOEwHbKv9sfBSPoETKlok,5980 +openai/lib/_parsing/_completions.py,sha256=OPNhEAhHny5YXODwtbdpIOI_yTF631GWbzfv-Su1UTo,10724 +openai/lib/_parsing/_responses.py,sha256=tztGj_9-eKbZv0QIx4auIPKX_s9mjkWpq1vcBrj38lE,6029 openai/lib/_pydantic.py,sha256=MF-M_S4atYolma-qpAMUBgGp1nUDJY6bxnzQEtYId1U,5617 -openai/lib/_tools.py,sha256=KInc2niRgZOdeQhab-FnSqgJ--TI8MBKGnbPQ3W2Y58,1953 +openai/lib/_tools.py,sha256=Dc4U2TXKvfAvVUvDS30SDeftrwgGM2vZ85t5ojLHiEg,1969 openai/lib/_validators.py,sha256=cXJXFuaAl7jeJcYHXXnFa4NHGtHs-_zt3Zs1VVCmQo4,35288 -openai/lib/azure.py,sha256=ODaQIn5YCayr9NoNOTp8LEoorXZCgpKybEirXx8V2Ic,25646 +openai/lib/azure.py,sha256=EO0ZVFxbyTdLL0uCbWbsZSBMgEVJULtatnqbq6p4rNc,26248 openai/lib/streaming/__init__.py,sha256=kD3LpjsqU7caDQDhB-YjTUl9qqbb5sPnGGSI2yQYC70,379 openai/lib/streaming/_assistants.py,sha256=LUWSinmYopQIkQ5xSg73b6BWbkRkQS5JvX62w_V9xSw,40692 openai/lib/streaming/_deltas.py,sha256=I7B_AznXZwlBmE8Puau7ayTQUx6hMIEVE8FYTQm2fjs,2502 openai/lib/streaming/chat/__init__.py,sha256=7krL_atOvvpQkY_byWSglSfDsMs5hdoxHmz4Ulq7lcc,1305 -openai/lib/streaming/chat/_completions.py,sha256=mh37wLWGTPMLSgHOueBPHZyIjvSUGtE9d-2D1DyvzbQ,30826 +openai/lib/streaming/chat/_completions.py,sha256=RaX-eOg0yo3JD-MiUdV3L1am6deH3sIjd3E1U1AF6Xw,30851 openai/lib/streaming/chat/_events.py,sha256=lstVmM6YR2Cs9drikzrY9JCZn9Nbfym0aKIPtNpxL6w,2618 openai/lib/streaming/chat/_types.py,sha256=-SYVBNhGkOUoJ-8dotxpCRqPJpfyOQ8hwR2_HrsQCRI,739 openai/lib/streaming/responses/__init__.py,sha256=MwE1Oc3OIiXjtuRFsuP_k5Ra8pNiqKpc1GZum-8ZRJM,543 -openai/lib/streaming/responses/_events.py,sha256=lTu_Gjd4xGatfJgy3nzabr5xUoZckSIzN3eIFnNVP9E,5423 -openai/lib/streaming/responses/_responses.py,sha256=kMlRYdsL_Up6pCOpMVcCjp7z-cPthj2bYeh3K56vu5o,13582 +openai/lib/streaming/responses/_events.py,sha256=3UWmeYgg23E3XTkYVlrpXJPnhBM2kmQFoXh3WiT9CrE,5576 +openai/lib/streaming/responses/_responses.py,sha256=JfDf3GLrLo8tnUVHusUXGXAYgOcLiv6VAB4Sp5PmLms,13672 openai/lib/streaming/responses/_types.py,sha256=msq1KWj3e3BLn7NKu5j2kzHgj9kShuoitgXEyTmQxus,276 openai/pagination.py,sha256=hzsCpoji93bVZ8jOfBs-sqPtTG0mf1MrpiduCOYlGoI,3242 openai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 openai/resources/__init__.py,sha256=3vxUFYFi0I0JQ1tbQ8irmHiHCNd4sJ1Pc0_EnVk2SxE,5713 openai/resources/audio/__init__.py,sha256=YM7FHvPKVlj_v6EIgfpUQsb6q4hS2hVQ3gfkgic0sP0,1687 openai/resources/audio/audio.py,sha256=nEIB4q7a1MSYdQkcYH2O6jB-_rNCMDCBJyUuqOL67CI,5491 -openai/resources/audio/speech.py,sha256=yqc_h7dAsFwae5PrbpYkWpme1sY9B5PTSnjgrJWdzf4,9744 +openai/resources/audio/speech.py,sha256=O1xIg3nzKAJkyiJOiSnRkGvVT981BqO5UfLYk6y60lY,10152 openai/resources/audio/transcriptions.py,sha256=8Vt-ibNuIConeAz6ITQya_0NZkINjJdSDvV3BG8-PqQ,39960 openai/resources/audio/translations.py,sha256=3z6KoZfqy0AiYTBS-WwQx-ZFWcMBJluRaCHsoHlyJ68,15675 openai/resources/batches.py,sha256=D7eS8qkw9qgs3q3Kura11NPS0uAwrs2XSFKiyu--0O0,20328 openai/resources/beta/__init__.py,sha256=rQz4y41YG2U8oSunK-nWrWBNbE_sIiEAjSLMzLIf4gU,1203 -openai/resources/beta/assistants.py,sha256=ptQFCa4WxB65zXFSdBRfhw4YSf7tftTjDB5njEsJTyk,45733 -openai/resources/beta/beta.py,sha256=Cc12HW9KWTegSpPnwFKRZJIhEfp0uBzOKpuTUBcO8Xw,5478 -openai/resources/beta/chat/__init__.py,sha256=d_fpyFMAG3iRAPIXANPfRG4HtEm6U_uMUYep7Skj2uY,263 -openai/resources/beta/chat/chat.py,sha256=sNvU8Fi_o3dWkD_X4Mobafv9XWBP6Y2dJxng-NdFXUs,597 -openai/resources/beta/chat/completions.py,sha256=Um3MOAuTSVHD0n7OI0I7piF0JOV6rooLoWEbcZ6pocE,29122 +openai/resources/beta/assistants.py,sha256=sjxzgLOGWqiM7nskgCxNIWg0tUkMBdAnAfJojmEK658,46079 +openai/resources/beta/beta.py,sha256=NSvXhBQp05G5IwWPyHz4PS5EPWdFmNrcvwlGwamnh58,5485 openai/resources/beta/realtime/__init__.py,sha256=dOXRjPiDqRJXIFoGKSVjzKh3IwSXnLbwHx4ND5OdnVs,1412 openai/resources/beta/realtime/realtime.py,sha256=7sgrNuxUHEkARV46OF5zz9uxzhCZvsqBrP1DepvZWyU,43470 -openai/resources/beta/realtime/sessions.py,sha256=FrN_-R_hxGoDsVPF_PAAIfHsouHatRfaRm_6AWvLlnU,22134 +openai/resources/beta/realtime/sessions.py,sha256=EYfwxRI0YNUmWX5ieEN63H_B_2R7OoPMH8YURGnpoDI,21962 openai/resources/beta/realtime/transcription_sessions.py,sha256=ByxJvryK6xg53gzus1qWG7OxI6bVwYbcU-qh-BbH0bI,14122 openai/resources/beta/threads/__init__.py,sha256=fQ_qdUVSfouVS5h47DlTb5mamChT4K-v-siPuuAB6do,1177 openai/resources/beta/threads/messages.py,sha256=eYoTcCIOcWEXnOU1Myf1hDUR31MkNRzZYNG76eaiJik,30906 openai/resources/beta/threads/runs/__init__.py,sha256=2FfDaqwmJJCd-IVpY_CrzWcFvw0KFyQ3cm5jnTfI-DQ,771 -openai/resources/beta/threads/runs/runs.py,sha256=iFqFyWNQ_2jb1ysjnOWHUms8cydru-QPbU8WENaUyfI,155392 +openai/resources/beta/threads/runs/runs.py,sha256=Sj3Nbmr17LQvToNR2oEVkriWvFqwdRKfKdY50EFHqrE,155302 openai/resources/beta/threads/runs/steps.py,sha256=hZNCr_P-d1T3HxHuW7I7IPL_VwwZffFEtlgwOrb-Kow,17069 openai/resources/beta/threads/threads.py,sha256=s1h76veuap8TJ1u-m3-WsnFOwDVdg2NtliIOdoDrBRI,99762 openai/resources/chat/__init__.py,sha256=8Q9ODRo1wIpFa34VaNwuaWFmxqFxagDtUhIAkQNvxEU,849 openai/resources/chat/chat.py,sha256=HjcasSCmt-g3-J-RkZQ9HRj_-hPfImakFxdUvvk5mCg,3364 openai/resources/chat/completions/__init__.py,sha256=KOi8blzNyHWD7nKgcoW3CxZ4428IcNVP0gCU74HySf8,901 -openai/resources/chat/completions/completions.py,sha256=Zj8qeECuwGxkknB-umSbWoEOGFM0KX6Tz55_1HrE9zE,124394 +openai/resources/chat/completions/completions.py,sha256=6duzQwep_VsYkx5sttyJCo--zLJWEYLrEQtIbfQmyg4,160922 openai/resources/chat/completions/messages.py,sha256=HCZH26TuTyuuajJy8MV--Irn4CHMQUSEt9C3j-E5Nvw,8052 openai/resources/completions.py,sha256=q6aQ74RGb4c8yO0yO57nJCEMN78ysUFcqcyZMFw38iU,60135 openai/resources/containers/__init__.py,sha256=7VzY-TFwG3x5D_kUCs_iAQaaCKAswt1Jk70KpmnU8Do,849 @@ -790,7 +842,7 @@ openai/resources/containers/containers.py,sha256=Q1ceaaOI6AM329vqAGdbynENFuP-PLO openai/resources/containers/files/__init__.py,sha256=nDhg0wY7eHRMO-xOErno0mV0Ya_ynlmKAp-4a3nj-us,810 openai/resources/containers/files/content.py,sha256=ObCykVTpSXFdzZUfH_zsZMLtouYZNkjBmugDoII1kIs,6491 openai/resources/containers/files/files.py,sha256=-iVBULSqyDo0vHhMh9tQB6ITT6ygu57z9k6A9Vq0mqo,21120 -openai/resources/embeddings.py,sha256=3f6-avPEeoH9rrfHNL1Ef3woqG-CwWC3iXPDk5pvZEY,12200 +openai/resources/embeddings.py,sha256=DurGP-eqS_JSC_KQtjMzVXWNnVFpdbvbu0pcrzi1KCE,12386 openai/resources/evals/__init__.py,sha256=DXhYb6mCKKY2bDdS3s4raH1SvwPUyaBFvdHgPEbwRWY,771 openai/resources/evals/evals.py,sha256=wMMBn54Tz1MP9yG-GftiiDPlcsTiz4OEtuCn4Vic2k0,26036 openai/resources/evals/runs/__init__.py,sha256=7EtKZ43tGlmAOYyDdyFXy80tk2X8AmXb5taTWRRXBXE,850 @@ -807,33 +859,34 @@ openai/resources/fine_tuning/checkpoints/permissions.py,sha256=XK11gP3bywJ8GjpBv openai/resources/fine_tuning/fine_tuning.py,sha256=UL4MXoUqEnbSZ5e4dnbUPTtd4tE-1p2L7Hh_0CQ_0s0,5410 openai/resources/fine_tuning/jobs/__init__.py,sha256=_smlrwijZOCcsDWqKnofLxQM2QLucZzXgboL9zJBPHw,849 openai/resources/fine_tuning/jobs/checkpoints.py,sha256=Z6p_IBzmVu3oRldxLKVKGVm1E8Xf7UUnItSnV7PJI9Y,7466 -openai/resources/fine_tuning/jobs/jobs.py,sha256=_I_mbAdX9wRWFT4tVyM3xmuakMuZN_KPHk-yxYGlzoE,37125 -openai/resources/images.py,sha256=Q6q7b1hls4IlLDaafs2f0uwWVT-p0EXcoMsdIH8IUQs,34257 +openai/resources/fine_tuning/jobs/jobs.py,sha256=gVnJKrvO-KKL4hq3gUHY4iMdAMkaH_lhNnyzBf-caGc,37237 +openai/resources/images.py,sha256=7CMOtbCAUMvXbSqU5JlGGAaV6pT5-HiH8x_CZbqGkY0,97201 openai/resources/models.py,sha256=CzLpB5Oj1x7U6eNKOcK0Z7M-NjEIpZvdWQLDAyIm7wM,11232 openai/resources/moderations.py,sha256=P_fgkp6sxnLo0k4b8Fcm0MSmOh-Oyj_wU_NFGfGPszE,7784 openai/resources/responses/__init__.py,sha256=nqybLst4yLblEyC-vAJYOVgM2X4BvcFmgluRNqOGIhk,902 openai/resources/responses/input_items.py,sha256=3FnbfOdMjbgtadTZPYQdKJut4NrorT1K9ppg5l9idoY,9150 -openai/resources/responses/responses.py,sha256=1ddJs3NsDcHpz5KOB6vfW73NCMDOmGT-RvijqzuHpeU,128382 +openai/resources/responses/responses.py,sha256=Crrv78RqI756hLGC8tzC_117P81HBzrlGN8M8NdE70Y,150786 openai/resources/uploads/__init__.py,sha256=HmY3WQgvUI2bN3CjfWHWQOk7UUC6Ozna97_lHhrrRSA,810 openai/resources/uploads/parts.py,sha256=n-G6rFFUaTs4Od1t37bvOzE0bV2VLwODjFBdbpsnkW0,8121 openai/resources/uploads/uploads.py,sha256=om7V-X4eYkxODSGBLamwKxBoPh--2FK5pJsfVjNHSZ0,24881 openai/resources/vector_stores/__init__.py,sha256=11Xn1vhgndWiI0defJHv31vmbtbDgh2GwZT3gX8GgHk,1296 openai/resources/vector_stores/file_batches.py,sha256=OgBqHEiNX8qLZZG1Ts8yJ4DcUEoByTcCdGL6-VQcb4k,33076 -openai/resources/vector_stores/files.py,sha256=2Ywh3UUunEDXvnJbqwvl0TMjAgqVYnW6eRtCMj7f0lA,39445 +openai/resources/vector_stores/files.py,sha256=4akTfvMTQOlPkY6bB6-8QLuxGPsrm_78t7UdJtyaNK8,39961 openai/resources/vector_stores/vector_stores.py,sha256=UdDiwEjetJSkgsuX0n1aBFPQdPVM17fF2EqUn8ZWuIo,35249 -openai/types/__init__.py,sha256=3Ci6p75iU4Lr4rNAcgITmy_k5IVXjVl8_4L-8fQ3xBk,6164 +openai/resources/webhooks.py,sha256=wz3filqxxUEhhW5RSa-1LiN10MzafKXJPl5-Wb1mCew,7820 +openai/types/__init__.py,sha256=r4ftepF2GBzDtkmXwvkG6-HIg5wvz6wr9x2ulnB8fVE,6873 openai/types/audio/__init__.py,sha256=l_ZTfiqnguKJfEEb61zegs8QsVdW9MlIkGkn8jIDRlU,1426 -openai/types/audio/speech_create_params.py,sha256=nWFAnqH8ApYROP6pfOQFTa_-m-o0tQjufb1ManzQoT8,1657 +openai/types/audio/speech_create_params.py,sha256=z-tpEXq-s7kXbzs0npO7stVmmlub4Xbei3ul25sYYVg,1748 openai/types/audio/speech_model.py,sha256=i_YqCZ4AWN0jCY70F8FAazQAsbQyG-VUQGxSJnLsviw,237 -openai/types/audio/transcription.py,sha256=YrTEIp6pIuW8zGEK7_MBNCBw3Y41pdPeL5dEVrM46Q0,787 +openai/types/audio/transcription.py,sha256=lUl3qdjgrK94zCjgpD4f9xa9w-vNhOTxh9hPeYj3ymc,2102 openai/types/audio/transcription_create_params.py,sha256=gV-2utqqPxbxShZDCPd_jhd6LjyT1NU9XVJOgty5h0c,5678 openai/types/audio/transcription_create_response.py,sha256=-PLGH8he9EdJtvBXV-ZrE31CLVnk4bc0VQ1ixRoN8Ck,378 openai/types/audio/transcription_include.py,sha256=mclUP_50njW7TG4d9m_E6zSjAFW8djPJ6ZTYub71kq0,227 openai/types/audio/transcription_segment.py,sha256=-pPAGolwIIXUBMic-H5U7aR0u_Aq-pipSA4xTtn_viA,1153 openai/types/audio/transcription_stream_event.py,sha256=e0ZMA1Ls5bR4C5NnPxZxfs-xiSczi8hrWMaF27pneUU,536 openai/types/audio/transcription_text_delta_event.py,sha256=jbfzVsjefZm64HAHXkKm4QskXxNqeEPj23xRt1clqvc,1075 -openai/types/audio/transcription_text_done_event.py,sha256=l-yxhofvs3_H6NLFy6Sqqs3Ap7bel4xuweYCeqEOJic,1084 -openai/types/audio/transcription_verbose.py,sha256=QkQBIdpvsubHjSvmvTb5ryo8Yzog3ZMvv4HZukEsjxI,760 +openai/types/audio/transcription_text_done_event.py,sha256=Q2-fKHeO_niBWWSCl-ZehKKz9DDM7KEimBx5Ha5e4t8,1940 +openai/types/audio/transcription_verbose.py,sha256=Dm5rPAMeMD-ZwijA8xff34QdOGLiRD5J2CN9R_dTIRo,1114 openai/types/audio/transcription_word.py,sha256=s2aWssAgHjMOZHhiihs1m4gYWQpjBP2rkI1DE5eZBXc,367 openai/types/audio/translation.py,sha256=Dlu9YMo0cc44NSCAtLfZnEugkM7VBA6zw2v9bfrLMh0,193 openai/types/audio/translation_create_params.py,sha256=ejrom_64QOe47gZtrYmDAQkb65wLaZL4-iU-mKVTVq0,1572 @@ -849,7 +902,7 @@ openai/types/batch_list_params.py,sha256=X1_sfRspuIMSDyXWVh0YnJ9vJLeOOH66TrvgEHu openai/types/batch_request_counts.py,sha256=u_a_hehmqYE6N6lA3MfvF1-CVzR9phiMlHgh_sRff0Y,408 openai/types/beta/__init__.py,sha256=uCm_uj8IYmxFZYD9tmGcEqpeEKnlzo64pNHcwdvnNv0,2328 openai/types/beta/assistant.py,sha256=_OgFKmjaMXM2yNOTFTcCj5qVo_-F9p7uiEXJnYbB0XE,5054 -openai/types/beta/assistant_create_params.py,sha256=vn4P-38i0uCN7D0tH8Rhn8VZPWXtZCW_QxvcxDj1ToI,7897 +openai/types/beta/assistant_create_params.py,sha256=kpKVdm_RM1wXteS473hydVPJCpROJHL_g_gNVwxGYA0,7887 openai/types/beta/assistant_deleted.py,sha256=bTTUl5FPHTBI5nRm7d0sGuR9VCSBDZ-IbOn9G_IpmJQ,301 openai/types/beta/assistant_list_params.py,sha256=yW-lj6AUkG0IRZQKre0veEr9p4VMN-9YdELFMYs74Cw,1222 openai/types/beta/assistant_response_format_option.py,sha256=yNeoAWxM-_8Sjmwqu8exqyKRFhVZIKeTypetPY55VFA,561 @@ -863,7 +916,7 @@ openai/types/beta/assistant_tool_choice_option.py,sha256=jrXMd_IYIQ1pt8Lkc-KrPd4 openai/types/beta/assistant_tool_choice_option_param.py,sha256=VcatO5Nej9e5eqfrwetG4uM1vFoewnBEcFz47IxAK2E,424 openai/types/beta/assistant_tool_choice_param.py,sha256=NOWx9SzZEwYaHeAyFZTQlG3pmogMNXzjPJDGQUlbv7Q,572 openai/types/beta/assistant_tool_param.py,sha256=6DcaU3nMjurur2VkVIYcCaRAY1QLQscXXjCd0ZHHGho,501 -openai/types/beta/assistant_update_params.py,sha256=Kfz6anZrxJN1tfE_CV23rK5-LWMhHmu8AMJo0BP7t7U,6426 +openai/types/beta/assistant_update_params.py,sha256=G6gkRtljICHsfXpmd5roF2zEPepNDmlvPNriYksEDtU,6595 openai/types/beta/chat/__init__.py,sha256=OKfJYcKb4NObdiRObqJV_dOyDQ8feXekDUge2o_4pXQ,122 openai/types/beta/code_interpreter_tool.py,sha256=7mgQc9OtD_ZUnZeNhoobMFcmmvtZPFCNYGB-PEnNnfs,333 openai/types/beta/code_interpreter_tool_param.py,sha256=X6mwzFyZx1RCKEYbBCPs4kh_tZkxFxydPMK4yFNJkLs,389 @@ -873,26 +926,26 @@ openai/types/beta/function_tool.py,sha256=oYGJfcfPpUohKw2ikgshDjOI1HXCK-5pAWyegY openai/types/beta/function_tool_param.py,sha256=hCclpGO4Re-TxiGy_QxX75g1kcN6_ElubicO6SdJ_YI,471 openai/types/beta/realtime/__init__.py,sha256=trJb-lqh3vHHMYdohrgiU2cHwReFZyw4cXM-Xj8Dwq8,7364 openai/types/beta/realtime/conversation_created_event.py,sha256=U4-nesN8rAep2_25E2DrkXUMafQejj3NE_0llXKj5Y8,752 -openai/types/beta/realtime/conversation_item.py,sha256=av6WCjWVuRxBjccmxv4j26cd3TCKURj2a7cf8uS3P3s,2297 -openai/types/beta/realtime/conversation_item_content.py,sha256=dj0XAEPqj4UPVb3E2nIgb8bZBA-PRNK-E7o3des6wmw,1005 -openai/types/beta/realtime/conversation_item_content_param.py,sha256=CKEwY9j6ApnvfsLKrdkEFfOW1CtxUWyY9OL-rIMUNaw,927 +openai/types/beta/realtime/conversation_item.py,sha256=eIFg9zl3qzEijcQZvCnkvVLpSZgvEdubasgxGsQuFM4,2327 +openai/types/beta/realtime/conversation_item_content.py,sha256=KWZY8EUkjAi6K_IkWVjjrNZLG3KK2vGCy2_O30CEhzY,1050 +openai/types/beta/realtime/conversation_item_content_param.py,sha256=CrGi3XKwnfJdQGs-kJaGCsn53omdJF6_je0GWnVXhjQ,972 openai/types/beta/realtime/conversation_item_create_event.py,sha256=jYXYdmqJh_znzcAgDuCxJXo5shf-t_DwmsyFkaDVnAE,1081 openai/types/beta/realtime/conversation_item_create_event_param.py,sha256=vxTag6TrOLu1bf46F3mUmRkl5dd1Kb6bUp65gBDVmhM,1101 -openai/types/beta/realtime/conversation_item_created_event.py,sha256=DIeG7YQ5HdKrnbnorklB1Zfsz42yRdPKDOx5TPzfvw0,722 +openai/types/beta/realtime/conversation_item_created_event.py,sha256=cZBm_uKk5dkQXLlbF0Aetg4NJge3Ftz9kwRu2kCI3m4,817 openai/types/beta/realtime/conversation_item_delete_event.py,sha256=p-O6R1Ku5pxZvaxhSi4YTPqLXS1SHhdLGgJuPQyPcHY,549 openai/types/beta/realtime/conversation_item_delete_event_param.py,sha256=a17h8Hd8MxUbXT6NQg8YpTr1ICt1ztRecpfukHw4g34,569 openai/types/beta/realtime/conversation_item_deleted_event.py,sha256=uWHSqX5ig550romSdhtROwrdQmdeN31Oz1Vpr9IuQFI,492 -openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.py,sha256=wCFIvqGe4AUCsSjZ00-w6synK_uf3MWKxxFnDUphtDc,1173 +openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.py,sha256=FwZHHO4ZGMKoeQ80snCh_S-7anNUQtRLOhGjb8ScGOQ,2538 openai/types/beta/realtime/conversation_item_input_audio_transcription_delta_event.py,sha256=5kjLmnRJug7L5fHxSSWWbhB70jGwNaMwbdENEwz9Xek,1143 openai/types/beta/realtime/conversation_item_input_audio_transcription_failed_event.py,sha256=xYNSBIyERQJ4P-5YoFF1VptfPa8JnJ0sWaH6LGsPow0,1077 -openai/types/beta/realtime/conversation_item_param.py,sha256=x12A5-yjNWodFNJEnbHKY1WJzSzX9s7EQr2c5FuYKBQ,2177 +openai/types/beta/realtime/conversation_item_param.py,sha256=HMB7MFR6WkztV1vMCFdIYNv8qOY4jzI2MIDtr9y8nEo,2207 openai/types/beta/realtime/conversation_item_retrieve_event.py,sha256=5Cc7f0fM8ujwER0eIcQRwz0rmc6hdCUrAqiAvRNn9Zc,559 openai/types/beta/realtime/conversation_item_retrieve_event_param.py,sha256=TRYaZ3btNaywRPaMOVRzK5VT7wh4taIGjbUdhkZ7gFc,579 openai/types/beta/realtime/conversation_item_truncate_event.py,sha256=1c2_BamaTkgD26eyGZJU5xwbz7lRHupqU2HqcK0VniI,943 openai/types/beta/realtime/conversation_item_truncate_event_param.py,sha256=hSnVOSMMtLf16nn4ISHkevYCfEsiN9kNcgxXRtHa8Kc,983 openai/types/beta/realtime/conversation_item_truncated_event.py,sha256=K4S35U85J-UNRba9nkm-7G1ReZu8gA8Sa1z0-Vlozc0,704 -openai/types/beta/realtime/conversation_item_with_reference.py,sha256=WF4r7-aw9Z6m6aNEy_fe9aHq8W-YxhwgU65PnLAQTgw,2564 -openai/types/beta/realtime/conversation_item_with_reference_param.py,sha256=yPM2TL7pMhz5UfJ37_FTn1H6r2WRbdxkAaW5jGCMfh8,2444 +openai/types/beta/realtime/conversation_item_with_reference.py,sha256=NDMfbnG0YKLqWJskFSHRIMkN2ISs8yNRxP6d6sZshws,3288 +openai/types/beta/realtime/conversation_item_with_reference_param.py,sha256=X0iEdjijFkoGtZtp0viB8bAFqMn4fNNSvJiCZbgJ-3Q,3079 openai/types/beta/realtime/error_event.py,sha256=goNkorKXUHKiYVsVunEsnaRa6_3dsDKVtrxXQtzZCmk,877 openai/types/beta/realtime/input_audio_buffer_append_event.py,sha256=lTKWd_WFbtDAy6AdaCjeQYBV0dgHuVNNt_PbrtPB8tg,662 openai/types/beta/realtime/input_audio_buffer_append_event_param.py,sha256=XmN2bE6jBRrkKGVPJdnPjJql5dqMPqwbmFnxo-z22JE,682 @@ -901,14 +954,14 @@ openai/types/beta/realtime/input_audio_buffer_clear_event_param.py,sha256=y-zfWq openai/types/beta/realtime/input_audio_buffer_cleared_event.py,sha256=j9gpm7aGVmrUt48wqtvBMN8NOgtvqHciegjXjOnWm7A,429 openai/types/beta/realtime/input_audio_buffer_commit_event.py,sha256=SLZR2xxRd6uO3IQL6-LuozkjROXiGyblKoHYQjwXk4I,493 openai/types/beta/realtime/input_audio_buffer_commit_event_param.py,sha256=B8agXC-rUl-D-RijJ5MeTLgw43qVYzmf2_2oAVokhLY,503 -openai/types/beta/realtime/input_audio_buffer_committed_event.py,sha256=wXMxuXLw1jmT4e-FmTp6rSxcSc_4l55zO3gT7jI1Mp4,628 +openai/types/beta/realtime/input_audio_buffer_committed_event.py,sha256=76XHl3ETfG5YiYce2OCUsv0wNfSiaabLzYVjGtBwux0,733 openai/types/beta/realtime/input_audio_buffer_speech_started_event.py,sha256=NVp60RUsLFtte9Ilknmu_5lRk2dZp_1fXCgGHd4EvSM,861 openai/types/beta/realtime/input_audio_buffer_speech_stopped_event.py,sha256=gszRuYQtAW8upIhd7CJZ7pxboDk-K7sqidjqxgf47q4,779 openai/types/beta/realtime/rate_limits_updated_event.py,sha256=kBnf_p-49Q_LNdJsj0R1Szi8R4TGYAAJ_KifLuuyFZw,949 openai/types/beta/realtime/realtime_client_event.py,sha256=0c48JcJH5yruF52zl0Sanm_dd2W5ZHV5GocRG0Xm6m4,1839 openai/types/beta/realtime/realtime_client_event_param.py,sha256=xBeZ60Q-OWuZxstPQaoqE0DUTDOPOwrL8LWMmDJI2rM,1887 openai/types/beta/realtime/realtime_connect_params.py,sha256=AvTypkFCYmDn9qMeektVqij6cqzgovr3PpgpMalJoJ4,290 -openai/types/beta/realtime/realtime_response.py,sha256=uS72PRUMwozY3xEMiv2XavPfrcIytjCRH7ZAYTCj5LI,3622 +openai/types/beta/realtime/realtime_response.py,sha256=iUOItlPQv6-okCuiTsloe0LDVyJ0MUQ64ug8ZaLePnw,3567 openai/types/beta/realtime/realtime_response_status.py,sha256=gU-59Pr_58TRfMZqFzdCloc53e1qOnU4aaHY3yURUK8,1326 openai/types/beta/realtime/realtime_response_usage.py,sha256=6XOFjCjPWioHoICZ0Q8KXuUzktQugx6WuTz0O5UvzZg,1541 openai/types/beta/realtime/realtime_server_event.py,sha256=-PpqZpg-DL_C_wseLMRQHWdBvxnVGRAfOF7x13Qr34E,5408 @@ -920,8 +973,8 @@ openai/types/beta/realtime/response_cancel_event.py,sha256=EKx8IZUISJHdl-_3tCdHt openai/types/beta/realtime/response_cancel_event_param.py,sha256=nidzBL83liHwyImiNGiz9Ad0V34EtFAQDw1utqcF6ns,630 openai/types/beta/realtime/response_content_part_added_event.py,sha256=a8-rm1NAwX685fk7GdT6Xi0Yr-JfeAkyUr94-RoFe34,1232 openai/types/beta/realtime/response_content_part_done_event.py,sha256=jO2TZygxPabbnEG9E1AfNP-JYJv1QtCMnCzgcZ_3n18,1190 -openai/types/beta/realtime/response_create_event.py,sha256=44ip8SdNcqfwg4ToQ7zY2hyKoaiQuR-yH8u4nIj6J7o,4844 -openai/types/beta/realtime/response_create_event_param.py,sha256=viQVrf4a-tNkrWlbelT6fPRgagk5VqHBZ3wARf3rEOE,4683 +openai/types/beta/realtime/response_create_event.py,sha256=46i-O9wwvhr1CzHNMDzhs2SGVwHiFJDOkQfOZZRfAWo,4763 +openai/types/beta/realtime/response_create_event_param.py,sha256=IPJlTWH0HzsknpSRrFgrQ3bfxsFZVRdQ6IYEsiGSZOk,4619 openai/types/beta/realtime/response_created_event.py,sha256=zZtHx-1YjehXxX6aNE88SFINDaKOBzpzejo6sTNjq9g,506 openai/types/beta/realtime/response_done_event.py,sha256=_yUPoECCli89iHLtV3NQkXQOW6Lc1JlxVPFw04ziBGY,494 openai/types/beta/realtime/response_function_call_arguments_delta_event.py,sha256=Yh2mQZDucfnTLiO8LRyG9r7zeS1sjwLcMF1JPMdTFJc,793 @@ -930,12 +983,12 @@ openai/types/beta/realtime/response_output_item_added_event.py,sha256=-_BZjvAqcg openai/types/beta/realtime/response_output_item_done_event.py,sha256=0ClNVMZmeIxKghlEid9VGoWiZ97wp00hIdNnev4qBD8,709 openai/types/beta/realtime/response_text_delta_event.py,sha256=B1yyuc6iMOMoG5Wh6W5KoQNYtVD1vEm2cKqHnl2CuFQ,721 openai/types/beta/realtime/response_text_done_event.py,sha256=mPgVG6nWxwkZ3aZOX-JkVF7CpaWP5-bvtbxFrr4fK7g,724 -openai/types/beta/realtime/session.py,sha256=vk_fFSSpLNVsne5gK1IMyiHh4C3dsavoCCRalnvAyc8,10196 -openai/types/beta/realtime/session_create_params.py,sha256=LhanVmuP4TDyMbPJJuhKpm0fQf3R_RenSk7dgssdt-o,10223 -openai/types/beta/realtime/session_create_response.py,sha256=PzFMvSt2We111uq47Gs5MpgzLngaFxKG481pHiDNaG0,6709 +openai/types/beta/realtime/session.py,sha256=02qLaP55-YS6YR06o-6bsJBnhg0lngxzbJMtqlA2-AY,10115 +openai/types/beta/realtime/session_create_params.py,sha256=S94Vlfg-xUKCSVg1IDDIt6WdVRoNthUEgWYaWVfJwrc,10191 +openai/types/beta/realtime/session_create_response.py,sha256=HfCFE46q3IEfvLFEdU06DAg5GKIPlJjaU9DtKzKcr2U,6574 openai/types/beta/realtime/session_created_event.py,sha256=rTElnBlE7z1htmkdmpdPN4q_dUYS6Su4BkmsqO65hUc,489 -openai/types/beta/realtime/session_update_event.py,sha256=NJzgZ-YBiHS8D_Aam4O6WRrPmIkmSHjmBpZvl96xXEo,11255 -openai/types/beta/realtime/session_update_event_param.py,sha256=gLdcY61WG7c8cWOerW_6rHerbyvzITOekYZ4YWtint8,10731 +openai/types/beta/realtime/session_update_event.py,sha256=cT0CoiiF2maNW4GWA0OG_3V3n7p-0NBatWGuGe_tIn4,11169 +openai/types/beta/realtime/session_update_event_param.py,sha256=x-Ie2SuxFeYzWO52ECkHoJbfe3-tikbET8mtoO9kydg,10689 openai/types/beta/realtime/session_updated_event.py,sha256=HyR-Pz3U9finVO-bUCvnmeqsANw-fceNvVqEIF6ey10,489 openai/types/beta/realtime/transcription_session.py,sha256=Soo2LuEMJtkUD2oPJ1E23GUcoUrYBiSu_UtbLUKemfw,3184 openai/types/beta/realtime/transcription_session_create_params.py,sha256=djkUaaz5xIVNct2NTT-7htg_6I6yfkgk20L4aaUHdbM,5975 @@ -980,7 +1033,7 @@ openai/types/beta/threads/refusal_content_block.py,sha256=qB9jrS2Wv9UQ7XXaIVKe62 openai/types/beta/threads/refusal_delta_block.py,sha256=ZhgFC8KqA9LIwo_CQIX-w3VVg3Vj0h71xC1Hh1bwmnU,423 openai/types/beta/threads/required_action_function_tool_call.py,sha256=XsR4OBbxI-RWteLvhcLEDBan6eUUGvhLORFRKjPbsLg,888 openai/types/beta/threads/run.py,sha256=erWl8z0MiFq9_dbFb_HN6AHdUru_H3NFM97OTZjBECE,8337 -openai/types/beta/threads/run_create_params.py,sha256=RsoF4VQs3sijm9zHNJTHZnbGW_uvTphrgykkrhQmqpA,10316 +openai/types/beta/threads/run_create_params.py,sha256=YdddWNL7QYIeCfXY_RoraSFU4s6_VfPM9Ona3wF5Zno,10306 openai/types/beta/threads/run_list_params.py,sha256=TgepSLrupUUtuQV2kbVcoGH1YA0FVUX9ESkszKuwyHY,1210 openai/types/beta/threads/run_status.py,sha256=OU1hzoyYXaRJ3lupX4YcZ-HZkTpctNE4tzAcp6X8Q9U,351 openai/types/beta/threads/run_submit_tool_outputs_params.py,sha256=cKiyD374BsZN_Oih5o5n5gOf_DYsxErVrbgxveNhmPI,1643 @@ -1011,46 +1064,58 @@ openai/types/beta/threads/text_content_block.py,sha256=pdGlKYM1IF9PjTvxjxo1oDg1X openai/types/beta/threads/text_content_block_param.py,sha256=feQr0muF845tc1q3FJrzgYOhXeuKLU3x1x5DGFTN2Q0,407 openai/types/beta/threads/text_delta.py,sha256=2EFeQCkg_cc8nYEJ6BtYAA3_TqgMTbmEXoMvLjzaB34,389 openai/types/beta/threads/text_delta_block.py,sha256=pkHkVBgNsmHi9JURzs5ayPqxQXSkex3F0jH0MqJXik0,448 -openai/types/chat/__init__.py,sha256=Ecu39-qSoX-TSW_2uHKshAEfeaexm0mZcHprAnzOR1s,4276 -openai/types/chat/chat_completion.py,sha256=jtjSQDCqcziOSlfsc7zt3amrDiZNCbb-OROEl5sU9I8,3492 +openai/types/chat/__init__.py,sha256=ufXTSG-8YI7grHtfozSf3L1YGwcGMBNd4tpBABNwz4Q,5864 +openai/types/chat/chat_completion.py,sha256=1H8f_yR5GQZfkDEi8pxqlJEKoPElb1dTz31nL-gkI0M,3538 +openai/types/chat/chat_completion_allowed_tool_choice_param.py,sha256=kQgAzwedjhFLqSzkhI59rJ2ZtfyMIhBQf09I9oJvpII,636 +openai/types/chat/chat_completion_allowed_tools_param.py,sha256=q7PeluUYm0xA9EbwwHdbbk72obyFyuChFDfG4zwIBto,1010 openai/types/chat/chat_completion_assistant_message_param.py,sha256=E6ZrsjEN_JHOHO-wC7Uk90Fa7Qz7bfgx8jea0z6g30s,2421 openai/types/chat/chat_completion_audio.py,sha256=ioAcuhkIdk1TSZK1LqTXYcjTPxoaM2b0RhGJekyCABY,655 -openai/types/chat/chat_completion_audio_param.py,sha256=DMsgSEGm0EEne5b0ONgHlLbcN70g2Ji6orIhi6E3FxU,840 -openai/types/chat/chat_completion_chunk.py,sha256=DfoqNokLJV1NSjhm4nHlf0kduqx_AjjBK02MPnBbXFw,6010 +openai/types/chat/chat_completion_audio_param.py,sha256=-VXba9BcEozOlgS5YsIEG_CMFrIsMsKimnGZYkQrrRw,779 +openai/types/chat/chat_completion_chunk.py,sha256=0ffW0rrbiz-N4F75bk2JQzZu5MsQifPI9r4BYhbjk6A,6056 +openai/types/chat/chat_completion_content_part_image.py,sha256=G51SQ-Pjc2FO8vtq_DizAlPe7WhloVZMK7L84Y2kECI,753 openai/types/chat/chat_completion_content_part_image_param.py,sha256=Gqv98qyD8jB81THZp49c8v2tHrId_iQp4NzciT9SKI0,797 openai/types/chat/chat_completion_content_part_input_audio_param.py,sha256=r1EXNEtjJo5oJ9AnP3omaJzACE1gSfdmob5Q0HKsOm4,704 openai/types/chat/chat_completion_content_part_param.py,sha256=0S9iFE1p93HG_Yx7Wj_TR2CmBNK_i7TaWE7HuE-tLc4,1259 openai/types/chat/chat_completion_content_part_refusal_param.py,sha256=TV1vu-IgrvKa5IBlPSIdBxUaW8g1zDhMOOBOEmhU2w0,467 +openai/types/chat/chat_completion_content_part_text.py,sha256=A9WfAYjt-8fbCzEn8kC9pTpK9e2G0aua58FqssXXfrY,363 openai/types/chat/chat_completion_content_part_text_param.py,sha256=4IpiXMKM9AuTyop5PRptPBbBhh9s93xy2vjg4Yw6NIw,429 +openai/types/chat/chat_completion_custom_tool_param.py,sha256=n-ThsvnkdKvRePzRdHEjikeXtju4K9Uc-ueB4LnByyM,1638 openai/types/chat/chat_completion_deleted.py,sha256=O7oRuPI6YDa_h7uKnEubsjtw8raTcyVmVk95hoDfo74,470 openai/types/chat/chat_completion_developer_message_param.py,sha256=OCFKdTWkff94VtgY7AaDUUFiZLT8LBn7WWxjbcIq2OM,830 openai/types/chat/chat_completion_function_call_option_param.py,sha256=M-IqWHyBLkvYBcwFxxp4ydCIxbPDaMlNl4bik9UoFd4,365 openai/types/chat/chat_completion_function_message_param.py,sha256=jIaZbBHHbt4v4xHCIyvYtYLst_X4jOznRjYNcTf0MF0,591 +openai/types/chat/chat_completion_function_tool.py,sha256=Yw3wlkMQPjs-j2JQaBEcbxtXv9b0w2FJryRPegWknjc,445 +openai/types/chat/chat_completion_function_tool_param.py,sha256=isNPdszq2CXOZB6a-ALjTBRaX8T-BeToe2tApMepmto,519 openai/types/chat/chat_completion_message.py,sha256=-42ZyMvih2Cz20W-o3ahIv_m0WA7H8i612mFIBpNAuA,2511 +openai/types/chat/chat_completion_message_custom_tool_call.py,sha256=fbnL3fERlW4E9hd5EoCcb43zgCoaPc11tZ0AlBjoegM,643 +openai/types/chat/chat_completion_message_custom_tool_call_param.py,sha256=OvZxmUFfz7SDl55gvfscHaKPHUe8DmV83JzkQhJQplo,752 +openai/types/chat/chat_completion_message_function_tool_call.py,sha256=9KJxJ6T40mFBtznBnPE3wfHlzhQtNG_ayrn3ZYuIlyA,916 +openai/types/chat/chat_completion_message_function_tool_call_param.py,sha256=V09BFjYcP2pYigtrBfFtg6PfEPKbD0E6MAUxrDWyn_g,1025 openai/types/chat/chat_completion_message_param.py,sha256=aLrz_cX_CYymFdW9cMIPZpv0Z4zM50RECV3SH6QNZsc,1019 -openai/types/chat/chat_completion_message_tool_call.py,sha256=XlIe2vhSYvrt8o8Yol5AQqnacI1xHqpEIV26G4oNrZY,900 -openai/types/chat/chat_completion_message_tool_call_param.py,sha256=XNhuUpGr5qwVTo0K8YavJwleHYSdwN_urK51eKlqC24,1009 +openai/types/chat/chat_completion_message_tool_call.py,sha256=RZkLrs9U0rZLpY_eFMbppPfUgGWDNUkzvqOMvaLlzlw,646 +openai/types/chat/chat_completion_message_tool_call_param.py,sha256=_h-sXVlcL6rkPqutydhKA95yazTd2B352l0NMMY67Iw,592 openai/types/chat/chat_completion_modality.py,sha256=8Ga0kruwJc43WD2OIqNudn7KrVRTPDQaalVkh_8bp9I,236 -openai/types/chat/chat_completion_named_tool_choice_param.py,sha256=JsxfSJYpOmF7zIreQ0JrXRSLp07OGCBSycRRcF6OZmg,569 +openai/types/chat/chat_completion_named_tool_choice_custom_param.py,sha256=K7LbF_AYWRohfzsVj8iCYNYePdAmqsqWmWoQBw_nsXk,565 +openai/types/chat/chat_completion_named_tool_choice_param.py,sha256=bS9rzU0SzIZCQCfOlEoRaRtFr10oIUV9HRQ_-iv6W0M,559 openai/types/chat/chat_completion_prediction_content_param.py,sha256=Xw4K_4F379LsXENOpZvREDn55cCnbmZ69xa4fw9w3bg,868 openai/types/chat/chat_completion_reasoning_effort.py,sha256=9sAGlM21dgRNOQRSsL_znZf9ruXcmvVriWeex0fRgMk,235 openai/types/chat/chat_completion_role.py,sha256=LW6-tqXaqpD7H53PiSXrjvIo6g4RfHhWityDm6Nfvig,275 -openai/types/chat/chat_completion_store_message.py,sha256=F2VcGoWEtXtWZc6-91rqTWj919zm_-nfoeGCdKt7edM,305 -openai/types/chat/chat_completion_stream_options_param.py,sha256=MOtUGVQvdZZZvyaAT-8qK9oXzVW3NbtSICt9ysdrmh4,773 +openai/types/chat/chat_completion_store_message.py,sha256=krUE7xzu6DWc64_yAOABOGfM8-aFeE59HDF1QLoOgek,916 +openai/types/chat/chat_completion_stream_options_param.py,sha256=5didkVskgUUcVH6BjfCnA6hG4lp9LOiBU7cDnx3abh0,1311 openai/types/chat/chat_completion_system_message_param.py,sha256=WYtzmsNP8ZI3Ie8cd-oU7RuNoaBF6-bBR3mOzST9hMw,815 openai/types/chat/chat_completion_token_logprob.py,sha256=6-ipUFfsXMf5L7FDFi127NaVkDtmEooVgGBF6Ts965A,1769 -openai/types/chat/chat_completion_tool.py,sha256=Zc_nRaV7pVOR3IAPtDfRh4DY3Ua5oxOmW_C_M2VC-nU,429 -openai/types/chat/chat_completion_tool_choice_option_param.py,sha256=ef71WSM9HMQhIQUocRgVJUVW-bSRwK2_1NjFSB5TPiI,472 +openai/types/chat/chat_completion_tool_choice_option_param.py,sha256=wPIjU-eeybPjRFr28mx8Njp2OCrKw3Xpu0231z4Kz1A,758 openai/types/chat/chat_completion_tool_message_param.py,sha256=5K7jfKpwTuKNi1PTFabq_LHH-7wun8CUsLDh90U8zQE,730 -openai/types/chat/chat_completion_tool_param.py,sha256=J9r2TAWygkIBDInWEKx29gBE0wiCgc7HpXFyQhxSkAU,503 +openai/types/chat/chat_completion_tool_param.py,sha256=5hFt0Izat_o50JMJzspCYeB0gubilRDB3a6yIfGHoN8,431 +openai/types/chat/chat_completion_tool_union_param.py,sha256=smpIoekwuuXKQx9jRRB2cqc3L7_fmN5lB4IIJHlKhys,504 openai/types/chat/chat_completion_user_message_param.py,sha256=mik-MRkwb543C5FSJ52LtTkeA2E_HdLUgtoHEdO73XQ,792 -openai/types/chat/completion_create_params.py,sha256=FMLuEyChftnBrSZQp9icW4e-N4oL9a4EgeJ1u_8sxbc,15947 +openai/types/chat/completion_create_params.py,sha256=M9PE3Ix0sOuFI1mwWWVh_bRrlj-67Xzx5qYvVOzdYj8,17250 openai/types/chat/completion_list_params.py,sha256=QBKLa941_4fU2PAT2uLImYIfPZj-WdTqqpsy0vQ1b0c,931 openai/types/chat/completion_update_params.py,sha256=VRDF28qoonjrveHhw8BT4Yo_NlLsV2Qzd_KUUQ6AEG8,742 openai/types/chat/completions/__init__.py,sha256=nmKlohYbZmr7Pzv1qCDMSDbthcH6ySPFIgvXpHZtxK8,195 openai/types/chat/completions/message_list_params.py,sha256=IArlye40xGlMVIDHxsK9RX_5usPL71wXPMgdwI7_wYU,583 openai/types/chat/parsed_chat_completion.py,sha256=KwcwCtj0yexl6gB7yuOnyETRW-uUvNRYbVzPMkwCe5Q,1437 -openai/types/chat/parsed_function_tool_call.py,sha256=hJzcKOpzf1tnXC6RGbPhaeCawq8EFdnLK_MfRITkW1U,920 +openai/types/chat/parsed_function_tool_call.py,sha256=JDWYo1XhTDQ8CxssbgjpzBhUw8jeXAmEd5Tr_CqFrVA,945 openai/types/chat_model.py,sha256=yFvzwm6VJXCn6jN21FS-utN6bcBBzRIpKYk1VTP8sdo,177 openai/types/completion.py,sha256=yuYVEVkJcMVUINNLglkxOJqCx097HKCYFeJun3Js73A,1172 openai/types/completion_choice.py,sha256=PUk77T3Cp34UJSXoMfSzTKGWDK0rQQwq84X_PSlOUJo,965 @@ -1072,7 +1137,7 @@ openai/types/create_embedding_response.py,sha256=lTAu_Pym76kFljDnnDRoDB2GNQSzWmw openai/types/embedding.py,sha256=2pV6RTSf5UV6E86Xeud5ZwmjQjMS93m_4LrQ0GN3fho,637 openai/types/embedding_create_params.py,sha256=vwV8t94f-_2ueVou3XLNxL1O7Yiu95Wg78p91o3BOiM,1999 openai/types/embedding_model.py,sha256=0dDL87len4vZ4DR6eCp7JZJCJpgwWphRmJhMK3Se8f4,281 -openai/types/eval_create_params.py,sha256=fOLI2-P21iPUrmp24SaEesw2cfPqeoQMLlG59qYic84,5991 +openai/types/eval_create_params.py,sha256=JEp4BVkc2C2tmSHKcEHmXJOcm8NAyYLsTU4luQQ-C6I,6550 openai/types/eval_create_response.py,sha256=h8o7zz_pat94dmryy2QDMOK3Lz-szPkmD52faYtBK0c,3531 openai/types/eval_custom_data_source_config.py,sha256=-39Cjr1v2C1Fer4PLl7rfA-bDK08I-bM4cqlp9Z_mzE,589 openai/types/eval_delete_response.py,sha256=iCMGN0JG5kFIYNPSCOMSWlTu0FDkd2lbAw1VLO73-bQ,245 @@ -1083,18 +1148,18 @@ openai/types/eval_stored_completions_data_source_config.py,sha256=7CYy14MMLj6HBJ openai/types/eval_update_params.py,sha256=Wooz-3SDznbC3ihrhOs-10y9cxpTKGQgobDLfZ-23c0,757 openai/types/eval_update_response.py,sha256=D9ItfznRN1jwp_w48r-i4jvH1_h2uiSpleHePrVigJs,3531 openai/types/evals/__init__.py,sha256=wiXRqdkT-SkjE0Sgv6MixeECZjF0xaoCPdSGFEh0rEs,1193 -openai/types/evals/create_eval_completions_run_data_source.py,sha256=ooTUcbQOviHxYIo78L_PDYjFrgqZ9QwvbxXJe2O6l20,6785 -openai/types/evals/create_eval_completions_run_data_source_param.py,sha256=6THoH0DzHLl_I4eJzxil9jysz_byvpW0fj3qcAjxT20,6774 +openai/types/evals/create_eval_completions_run_data_source.py,sha256=AXHXZFv8p97WbItOrwn9Ukdjm-sb1uNhiU2nCnkN05w,7340 +openai/types/evals/create_eval_completions_run_data_source_param.py,sha256=un-BSAELadrQZP_43AaGZeYih5KRc07aWTyC6i9-Y3c,7349 openai/types/evals/create_eval_jsonl_run_data_source.py,sha256=GzE9S1AZy46LOooR61Nwmp5yGUMoFGU5yk4g18BP72E,1219 openai/types/evals/create_eval_jsonl_run_data_source_param.py,sha256=sM4-h4qDDkttGeaKgip8JZeuiaghPTBmwwxb5Xa6zhk,1285 openai/types/evals/eval_api_error.py,sha256=VvRO-N9_tIxpRiSi17PXiMpleowg_Y-Rq2kqiRgmpC4,268 -openai/types/evals/run_cancel_response.py,sha256=6ot0HJLj5fivi1NGBMW96bqRK7qJNnWxkng_7w_GYto,12404 -openai/types/evals/run_create_params.py,sha256=kwWc1BZ8ayGicXRzClPwm8H0D_8APV5xNMvorBfXDsw,11310 -openai/types/evals/run_create_response.py,sha256=ZBbkEfg6r6J_dGpw-UgLljl-kVptOB_MjQiJZvJMMXc,12404 +openai/types/evals/run_cancel_response.py,sha256=ccaVlGEq6I-XtN433eVsxkOWeRyk00tdh6hEnQ0AazA,12994 +openai/types/evals/run_create_params.py,sha256=ja7wtiO1PIJtI6G_QABZu6RnB0D_rU25d4VX6FCVrZw,11986 +openai/types/evals/run_create_response.py,sha256=uZnxKGphf5Iir6jT9YUgvlF4SbrNyNj4U-_wzNhKwZQ,12994 openai/types/evals/run_delete_response.py,sha256=WSQpOlZu53eWBCXSRGkthFn_Yz5rDCcSomqoa4HpUrk,323 openai/types/evals/run_list_params.py,sha256=vgbJMYybzCep7e9rxUVHlWy_o4GNy4tJyGTwNu4n4ys,758 -openai/types/evals/run_list_response.py,sha256=ZyOFgkMEjb9VDljMYJZNKqIZKLb4fjxkqeuYskNgLkI,12400 -openai/types/evals/run_retrieve_response.py,sha256=ZGvwQapNy-ClYboTEpsREO0hw0wNZCQlVt40U9Pfr6Y,12408 +openai/types/evals/run_list_response.py,sha256=fET6aupjY_lvhPHa5-Id9ahefKHDk2I5AhcUZeuiPcI,12990 +openai/types/evals/run_retrieve_response.py,sha256=6wlUPgTl6ZNIcFeawsung6EVqFSGLcRraR8QYfgLM5U,12998 openai/types/evals/runs/__init__.py,sha256=sltNV1VwseIVr09gQ5E4IKbRKJuWJSLY1xUvAuC97Ec,393 openai/types/evals/runs/output_item_list_params.py,sha256=Lp1OQV1qXeEUwMS90_-BpOnO1jICwJOo9QgNC9OGJ2U,821 openai/types/evals/runs/output_item_list_response.py,sha256=YwVwZG2Fo1rPtJMCfVd8_RYRsaHYZEr5DzUZ9n6GJkk,2747 @@ -1105,7 +1170,7 @@ openai/types/file_content.py,sha256=qLlM4J8kgu1BfrtlmYftPsQVCJu4VqYeiS1T28u8EQ8, openai/types/file_create_params.py,sha256=13FFRoLfKObvYRKrt-HOmvcSL4uE_UzscyD753F4bEA,776 openai/types/file_deleted.py,sha256=H_r9U7XthT5xHAo_4ay1EGGkc21eURt8MkkIBRYiQcw,277 openai/types/file_list_params.py,sha256=TmmqvM7droAJ49YlgpeFzrhPv5uVkSZDxqlG6hhumPo,960 -openai/types/file_object.py,sha256=ykZlEs6ysU_YhXkeW-RgEngvtOSt6v9cwcZanNDA5jQ,1420 +openai/types/file_object.py,sha256=Qu0rci3ec0iPh36ThAK4tiCN_BRmULnOFU8jzzFYhB4,1504 openai/types/file_purpose.py,sha256=aNd8G-GC1UVCL9bvTgtL4kfkiF0uEjfiimRS-eh8VrY,265 openai/types/fine_tuning/__init__.py,sha256=f8GH2rKGcIU1Kjrfjw5J0QoqlsC4jRmH96bU6axGD64,1832 openai/types/fine_tuning/alpha/__init__.py,sha256=e_Evj3xLs7o_SONlqoXDM75oZMbxuGWhxBW-azsXD_w,429 @@ -1128,7 +1193,7 @@ openai/types/fine_tuning/fine_tuning_job_event.py,sha256=POxSD7-WxAtJV2KuEpA9EmZ openai/types/fine_tuning/fine_tuning_job_integration.py,sha256=uNFfuBV87nUHQORNGVLP_HbotooR_e37Bgd0dyZ4nUM,241 openai/types/fine_tuning/fine_tuning_job_wandb_integration.py,sha256=YnBeiz14UuhUSpnD0KBj5V143qLvJbDIMcUVWOCBLXY,1026 openai/types/fine_tuning/fine_tuning_job_wandb_integration_object.py,sha256=7vEc2uEV2c_DENBjhq0Qy5X8B-rzxsKvGECjnvF1Wdw,804 -openai/types/fine_tuning/job_create_params.py,sha256=vRTo3w0ManSuszz0c7dMbNrlt9zoCeGU5qp11UDmxAY,6115 +openai/types/fine_tuning/job_create_params.py,sha256=bkEO-wvPz-kNk-BRU8JS8ypwlXXAxVawgn8EvO9yN-A,6137 openai/types/fine_tuning/job_list_events_params.py,sha256=4xOED4H2ky2mI9sIDytjmfJz5bNAdNWb70WIb_0bBWs,400 openai/types/fine_tuning/job_list_params.py,sha256=wUGXsQ4UDCKvAjHDZAZ-JDU6XAouiTGThb0Jo_9XX08,623 openai/types/fine_tuning/jobs/__init__.py,sha256=nuWhOUsmsoVKTKMU35kknmr8sfpTF-kkIzyuOlRbJj0,295 @@ -1143,24 +1208,30 @@ openai/types/fine_tuning/supervised_hyperparameters_param.py,sha256=WogLPJmKhsqg openai/types/fine_tuning/supervised_method.py,sha256=p9lV9DCi7KbkfOuZdytm1Sguqt-0AWtRiNawxxSuCgA,408 openai/types/fine_tuning/supervised_method_param.py,sha256=LNvDK4FdDWflr7KQHYBDcWP9UB5UBcGP3YohVsnvi7s,445 openai/types/graders/__init__.py,sha256=GiHbVTKVpfAqbbzZrtF-N00Njkr28cNG26wd_EDLPGI,1019 -openai/types/graders/label_model_grader.py,sha256=RuMB8WbE9DjqVC8j6VqGsUbnMpgPcdNO4sSTsQa1rFQ,1520 -openai/types/graders/label_model_grader_param.py,sha256=ZYUGIR2qAB3ByZKZgBYOhWvgWQ0RsvKFlnhaWNvCi-M,1696 +openai/types/graders/label_model_grader.py,sha256=Lu7YY9ChjeX5ANohawGLg1nXgrRyEYPt_Id9-HWka8I,1936 +openai/types/graders/label_model_grader_param.py,sha256=u6i0lo0QDkgh118E9w0NmAMBnE883j-6vxTgrvzyKyg,2138 openai/types/graders/multi_grader.py,sha256=QyTkY28D7_DyZHOdlTCpLHHyzWFYDs8KT4-30_XgSLY,1018 openai/types/graders/multi_grader_param.py,sha256=6-AOnwpdJt5yGBqdtSu7fPOIav0GuipZMg5ZnDskYtc,1191 openai/types/graders/python_grader.py,sha256=WnZ24W9dtfqX8ZEPgVArYNkyAQElz2j-6no03u1wcU0,534 openai/types/graders/python_grader_param.py,sha256=ss-fnK1MZe9eDLvFd2sz1AayD3cbuIMBn3mXCDUZMb8,565 -openai/types/graders/score_model_grader.py,sha256=GLjlA53MNS6oKMdIVsoRimKmRf06XH396j8CWfQKc5I,1542 -openai/types/graders/score_model_grader_param.py,sha256=W1T0pKNY9i5EHYN1NP7xpRiV2AMXduwpdya3AiXm4jU,1662 +openai/types/graders/score_model_grader.py,sha256=oOP28YH12TcaJDjFII2X9AIDtEiK9H4VA2iXfZA8rB4,1958 +openai/types/graders/score_model_grader_param.py,sha256=6DwZGB1vVD9ACgJxjGYNeasAW6fR8x9uTlPdGi4PwVw,2104 openai/types/graders/string_check_grader.py,sha256=Ofmiv6cZw6Le42M-XQ2p_IJqazRLN626xf_zie5LVKE,675 openai/types/graders/string_check_grader_param.py,sha256=gwIhLOMY4xyI6lKLwGTrTlorb98mODRATC1Ei2KbvrY,771 openai/types/graders/text_similarity_grader.py,sha256=u4BsztOq6UXnnjAN9DX63XpRvAfNARrhrrd3ZsUzsiw,786 openai/types/graders/text_similarity_grader_param.py,sha256=c7IXZQg8goxQpqTvfPTMBdiGsQmrMzHsOA0Q53Gis5U,904 openai/types/image.py,sha256=cWbI4EZxZ_etXKGl0u-7sr3_fJEaWwP0RpJ2fSIDYfc,766 openai/types/image_create_variation_params.py,sha256=Xeka4vp5V0o8R_6vnLsqiQhWH5O6tUSCyO3FKGVmAeU,1426 -openai/types/image_edit_params.py,sha256=ntaDKxXKYfieWfJ9Il47wu_HSSW8XikqP7gwN-wGO6M,3335 -openai/types/image_generate_params.py,sha256=g_eqIj9riTo82x2vXjxPWT0W7KprB5NNuYporyPDPEY,3998 +openai/types/image_edit_completed_event.py,sha256=E19lxYAYTACjUME298BXryQdQZ0DnzWZPbzM636el6k,1736 +openai/types/image_edit_params.py,sha256=h0ANOkNARNM2Y9PO1aOvgOLqwPmoemGpcbIQl_qUqFA,5310 +openai/types/image_edit_partial_image_event.py,sha256=kgMb_9JveHjePvhZFhUnj5-us1mdZhgzFaoOUPmFBLU,1095 +openai/types/image_edit_stream_event.py,sha256=GtHKc8VdumW5RnQtIiyMqhwIIaqYogKXZF1QNuq9Bd4,516 +openai/types/image_gen_completed_event.py,sha256=sA2Ezhl-Gwh0cPq3VFmDSZDD8yiO1i5mkB-BziIdqd8,1745 +openai/types/image_gen_partial_image_event.py,sha256=vTArcJ1v00opWXiP8iUr9L886cg1VUCtoJLL8NCUH8I,1077 +openai/types/image_gen_stream_event.py,sha256=gVzdE6qzBPpK3kEFM7EdoUzBa4DgCaS3AdF9gjd0pUs,508 +openai/types/image_generate_params.py,sha256=7GBDjcoEdKX8buOK6IroOn7eH9GFkcXb-LGYKfVuRMU,5323 openai/types/image_model.py,sha256=v8nkOop8L8LS6WSMhl4poJ0edMN9Khkdn9epylLQDvE,234 -openai/types/images_response.py,sha256=pjyldIxYKzezkUIJ8HPz9tScPhSFt8i_Px8n0JW-fV4,1210 +openai/types/images_response.py,sha256=cpbt5tKIax5JIDM4FSj3hjo2RO7AFN2pJPNQm4AWqeM,1905 openai/types/model.py,sha256=DMw8KwQx8B6S6sAI038D0xdzkmYdY5-r0oMhCUG4l6w,532 openai/types/model_deleted.py,sha256=ntKUfq9nnKB6esFmLBla1hYU29KjmFElr_i14IcWIUA,228 openai/types/moderation.py,sha256=6mV-unXrz5mA47tFzMNPiB--ilWRpOXlCtT5HKZE7vg,6840 @@ -1171,9 +1242,11 @@ openai/types/moderation_model.py,sha256=BFeqSyel2My2WKC6MCa_mAIHJx4uXU3-p8UNudJA openai/types/moderation_multi_modal_input_param.py,sha256=RFdiEPsakWIscutX896ir5_rnEA2TLX5xQkjO5QR2vs,483 openai/types/moderation_text_input_param.py,sha256=ardCbBcdaULf8bkFuzkSKukV9enrINSjNWvb7m0LjZg,406 openai/types/other_file_chunking_strategy_object.py,sha256=Hf9XBL1RpF9ySZDchijlsJQ59wXghbVa0jp8MaEoC-4,310 -openai/types/responses/__init__.py,sha256=jcfcirJCsG_JQQ3pxTBMynN23A1cRcS4hx86-l8SByw,13270 +openai/types/responses/__init__.py,sha256=2vjQjcmymwCF9hNCReX6_fWvjCACyUcip6s6dpbFjn4,14527 openai/types/responses/computer_tool.py,sha256=bigJ0RyhP6jKtAB7YM-oP2sPtL1isCnZufTue80u9vg,607 openai/types/responses/computer_tool_param.py,sha256=7SJn4rXdQeAt-DiMiXfdPI6Q_X6S7Wfxrc1Am8nPZeg,693 +openai/types/responses/custom_tool.py,sha256=WcsLiBUJbnMhjFF3hAFCP8SsCzzcbJh4BhC3NiVIl0c,736 +openai/types/responses/custom_tool_param.py,sha256=cAbh_D2pQa0SPEFrrRVPXXoQCndExjjqKrwRaBghWZk,748 openai/types/responses/easy_input_message.py,sha256=4rPo04A1WVaCxLpPn3e_gJNgdNuAKlH9k6ijLK3-Bdc,817 openai/types/responses/easy_input_message_param.py,sha256=8kM4AkSoiUOspuDTQPfdLjkgydQ9yHmo-FCfjdthtgU,873 openai/types/responses/file_search_tool.py,sha256=WquLED7txr7E_6-YebznUuEwNDnMRbXW8fKEQdqro80,1369 @@ -1181,19 +1254,19 @@ openai/types/responses/file_search_tool_param.py,sha256=efmnWaFeNsB9EdOY5eJJ0DcT openai/types/responses/function_tool.py,sha256=gpcLwRIXSp92jVJcIXBUnsSH_FzJrlH-jLIo-IbE1IY,796 openai/types/responses/function_tool_param.py,sha256=ZDGBcqx-T24wgum2YHr3kBzk-P8lH-lCkuAHxyzKxGI,861 openai/types/responses/input_item_list_params.py,sha256=tslD-H9JZRZBH8yI2A8XmPilzr418KbYu0A-VsQJjqQ,1044 -openai/types/responses/parsed_response.py,sha256=cglKKalmeKmmH_tgfOPD78BlX6NqCCQpaN4oSvbTCWQ,3221 -openai/types/responses/response.py,sha256=2GB0L_qmbZMRQntUajmTLlx3LgqRuGccHCFDq64Usoo,9005 +openai/types/responses/parsed_response.py,sha256=1rKsrhTtF8LhoRt_SHtBtQcRbztxAvPgZvTqGB9AMsY,3315 +openai/types/responses/response.py,sha256=2VtV1byWooQiWjDLk6nrr_YrFDcG9s1dk4Y1F_c7LHE,11065 openai/types/responses/response_audio_delta_event.py,sha256=mXPosLnDn72HLG-Lk3EdyOw7isLm3HgpqQoYkG6XrJY,515 openai/types/responses/response_audio_done_event.py,sha256=26KUM9PJlWIQi80FKo5TSD9lKJh7JnPHnUCD5cqIcrg,414 openai/types/responses/response_audio_transcript_delta_event.py,sha256=Q3nSbPpT5Ij3iIvpweMF9KCct20B8MWJWOFV5pVqC8k,533 openai/types/responses/response_audio_transcript_done_event.py,sha256=92_yKmcs8ILjaA6NeoZR1wuzUS0VXLzCfMNcdRji6-o,457 -openai/types/responses/response_code_interpreter_call_code_delta_event.py,sha256=8nAJuGm1wfa3fqnvom5qqcaYp8Pzq3CP_mAoRt30LH0,688 -openai/types/responses/response_code_interpreter_call_code_done_event.py,sha256=jPyQXCk_ge8iGHDS1xqIrWwBZZd-VF4_Bctd8JXKVbI,682 -openai/types/responses/response_code_interpreter_call_completed_event.py,sha256=HEEIWRZqXHkGVgVb2V1EZ-ueyT_9xr6X9BYvvlBT4J4,780 -openai/types/responses/response_code_interpreter_call_in_progress_event.py,sha256=tUPTFke2CNa-Gok5dahF3IBbZLHF8bS8Ll8Fr6cq19I,786 -openai/types/responses/response_code_interpreter_call_interpreting_event.py,sha256=dVaBMmG7uPJWKWQBEiDeiqVrGXxmRLd9KQZT-Acrdfw,792 -openai/types/responses/response_code_interpreter_tool_call.py,sha256=iI0OCJio03GkZYx4IGWSjPkWYnYqECJR3wvNavffd7o,1560 -openai/types/responses/response_code_interpreter_tool_call_param.py,sha256=QK_z_lNbwzyJDbDnVKHNeF6Ni1y8GdtqkjdPNKeYXxM,1647 +openai/types/responses/response_code_interpreter_call_code_delta_event.py,sha256=mPveF26pvu_3esV1tMUnqfsT_NnZ1HWeqNM4F38NqUU,840 +openai/types/responses/response_code_interpreter_call_code_done_event.py,sha256=M5bmLyCJX8YFJv4GPtPBQZuXvt-ObQE9fztWnMli9rU,806 +openai/types/responses/response_code_interpreter_call_completed_event.py,sha256=STgdlJ5gQFLJeDwJGTGgvKKaJ_Ihz3qMNWWVjC9Wu4E,759 +openai/types/responses/response_code_interpreter_call_in_progress_event.py,sha256=4G7za-MHwtjkSILQeV_oQ6LEIzK35ak5HE3oi1pYFzA,767 +openai/types/responses/response_code_interpreter_call_interpreting_event.py,sha256=n8gNOqoJf47KE1T7kYE7q9bCeFnIUeODuFHmlGZcYkE,774 +openai/types/responses/response_code_interpreter_tool_call.py,sha256=ZOpjzLGxAoRad-MI4lrllxyVy4vBGnsMFj4jsNbej60,1646 +openai/types/responses/response_code_interpreter_tool_call_param.py,sha256=DOaAAxw2crU1ID9qrpJKvNEw1tAH8mW5kyUx3pSCnEA,1719 openai/types/responses/response_completed_event.py,sha256=lpsi8GcuDN1Jk624y6TsUjpxRO39-Pt_QeuVtU8g-QA,517 openai/types/responses/response_computer_tool_call.py,sha256=DZpxSuTbYHt4XDW50wpWm167hgHxZhBCnGbHN8SgUjQ,4644 openai/types/responses/response_computer_tool_call_output_item.py,sha256=BYBAJUKqSsAbUpe099JeaWCmTsk4yt-9_RnRroWV2N0,1493 @@ -1202,8 +1275,14 @@ openai/types/responses/response_computer_tool_call_output_screenshot_param.py,sh openai/types/responses/response_computer_tool_call_param.py,sha256=p25y4yTFM8BrxIaGleGSqlRsndoPiR2Dbp5eGjHvf_s,5047 openai/types/responses/response_content_part_added_event.py,sha256=58yTea-npQtrAhzj5_hBU6DcLA6B8Fv-sjtNFWKtkH8,1089 openai/types/responses/response_content_part_done_event.py,sha256=ruZJUMhcTKY0nU3dPpXs6psLyAyyDj5kAQBm21mTO9Y,1081 -openai/types/responses/response_create_params.py,sha256=xKJox4nu2msKVAj3ZnZJ92hq0EYmQB46Pp6RQFItwqs,9759 +openai/types/responses/response_create_params.py,sha256=LOuPyXnAiraQiwM6ZxDvZK68iVpbNPvjM1nVUcY6BCU,12574 openai/types/responses/response_created_event.py,sha256=YfL3CDI_3OJ18RqU898KtZyrf0Z9x8PdKJF2DSXgZrc,502 +openai/types/responses/response_custom_tool_call.py,sha256=3OFPImUjDkZPRnyf1anPoUD_UedOotTAF3wAeVs-BUM,730 +openai/types/responses/response_custom_tool_call_input_delta_event.py,sha256=AuKmvk_LEcZGNS3G8MwfAlGgizrPD5T-WwPV5XcwH7s,695 +openai/types/responses/response_custom_tool_call_input_done_event.py,sha256=6sVGqvbECYHfrb1pqbg0zPSO6aFu4BfG5fwI-EkCHOA,681 +openai/types/responses/response_custom_tool_call_output.py,sha256=XAwmrZXrzPCUvL7ngGBEe8SG89tmwUm6HSTk2dcl5dM,712 +openai/types/responses/response_custom_tool_call_output_param.py,sha256=vwB0jeJgbSsbPr77TYMUlhmyhR2didIiAXWDGdUmzPY,743 +openai/types/responses/response_custom_tool_call_param.py,sha256=bNJuc1YiF8SToRWjP0GiVgmttQieNPW0G5cfuKpvRhQ,771 openai/types/responses/response_error.py,sha256=k6GX4vV8zgqJaW6Z15ij0N0Yammcgbxv3NyMxZeJsdQ,915 openai/types/responses/response_error_event.py,sha256=695pQwl1Z2Ig7-NaicKxmOnhBDQKAcM44OiYCwl3bRc,576 openai/types/responses/response_failed_event.py,sha256=Y0g4NnAuY3ESLzrkJ6VUqQ2CuQYBQ3gCK5ioqj4r9Rg,492 @@ -1222,109 +1301,120 @@ openai/types/responses/response_function_tool_call.py,sha256=SNaR7XXA6x5hFWMVjB2 openai/types/responses/response_function_tool_call_item.py,sha256=Xbkpq2_-OQ70p-yA---inPz6YaRU8x1R4E6eTiWN7Zs,340 openai/types/responses/response_function_tool_call_output_item.py,sha256=NlYlCJW1hEn61heh9TMdrYHRVpOYXHucOH6IXVA6588,886 openai/types/responses/response_function_tool_call_param.py,sha256=k153-Qo1k-VPZidjuBPp2VcB6RGYGEQjGbZO2_RJ6ZY,941 -openai/types/responses/response_function_web_search.py,sha256=QbHSkY2Y_LBig2nei11sg0JSsyY01qHSLEoHPJyISWo,545 -openai/types/responses/response_function_web_search_param.py,sha256=nHe2ldVxO6zRD-GDhLTQtPE5vytW5QXd9d9XHr634lQ,621 +openai/types/responses/response_function_web_search.py,sha256=rtJsX3kXUDlSKPCC45lC3Cxo81SNgj89w8XnYfGsVs0,1503 +openai/types/responses/response_function_web_search_param.py,sha256=VQ_o_kPPJONRpHRYbBkWjUceml829Lp6-dLtRC9e138,1605 openai/types/responses/response_image_gen_call_completed_event.py,sha256=sOYW6800BE6U2JnP-mEU3HjubGd-KkiPwZ7jisDT_7Y,671 openai/types/responses/response_image_gen_call_generating_event.py,sha256=1mjodLwyfkMBzcgQQhTix_EzQFNAWKnL6aycczObXJI,706 openai/types/responses/response_image_gen_call_in_progress_event.py,sha256=DxvV9tMMGGcu5lTgIuHTL7Kbt3bO40NKg6Qd8kATvkQ,708 openai/types/responses/response_image_gen_call_partial_image_event.py,sha256=xN3hw_RbEiD9ZoSZCf3TJZcL3JUIWCVzd5cha20s_7I,971 openai/types/responses/response_in_progress_event.py,sha256=uvYzRXq4v6LuXY8fNyGbzbTt4tySoSskzz_hUFWc-64,518 -openai/types/responses/response_includable.py,sha256=nlkwv4jc7NQME_DYJVygBfZI2Z59QmUlcrve0KgIBII,400 +openai/types/responses/response_includable.py,sha256=A4cf5h8hd2QheP1IKGrvCThGy0mzyZ73MeiJ-yhTNU4,436 openai/types/responses/response_incomplete_event.py,sha256=0EP3BJzI2E6VXcpEvaPenBKHGocEZbFjToSMMktUo7U,516 openai/types/responses/response_input_content.py,sha256=MaZ-MNnZvhM2stSUKdhofXrdM9BzFjSJQal7UDVAQaI,542 openai/types/responses/response_input_content_param.py,sha256=1q_4oG8Q0DAGnQlS-OBNZxMD7k69jfra7AnXkkqfyr4,537 -openai/types/responses/response_input_file.py,sha256=pr_t75zb0LomPFsCW9-8-GPCiCiY4Cajtit6MIpYAZ8,626 -openai/types/responses/response_input_file_param.py,sha256=iALK66fSKnUqQM3SF9A_vI5ZeuS05T7XVKYMSvFm2lc,641 +openai/types/responses/response_input_file.py,sha256=Sp8QjnKF3XgUbPXRRpOhJAnlpbyVdAFM8AY-9Xa3JZo,717 +openai/types/responses/response_input_file_param.py,sha256=1v_0w7IsMTeasMI97k5RtWF2XsqJGEgoV7Urzm7_Rio,715 openai/types/responses/response_input_image.py,sha256=zHA7iFssu0aFcivwzyurAJgGpFdmzxq1BooVp5magsI,778 openai/types/responses/response_input_image_param.py,sha256=5qhS_nF1GH3buGga8HSz9Ds2gVqQ8OqhfhkvssciIHE,830 -openai/types/responses/response_input_item_param.py,sha256=8tUhXUceoqhYGzTmZZsnZHuOdxN1uCb7l-PSIpck8_8,9370 +openai/types/responses/response_input_item.py,sha256=o-uhywXY8scND8qVqVGKzd-MKbllzyRsjU5Wug2V6Ps,9101 +openai/types/responses/response_input_item_param.py,sha256=xf2GC-tWP0xirIKYqL0WP24Xg4xNXA2uiUuTXG9IYo0,9601 openai/types/responses/response_input_message_content_list.py,sha256=LEaQ_x6dRt3w5Sl7R-Ewu89KlLyGFhMf31OHAHPD3U8,329 openai/types/responses/response_input_message_content_list_param.py,sha256=cbbqvs4PcK8CRsNCQqoA4w6stJCRNOQSiJozwC18urs,666 openai/types/responses/response_input_message_item.py,sha256=_zXthGtO0zstLvIHg9XesNAme6yNa8JOejkBYLwXm70,1029 -openai/types/responses/response_input_param.py,sha256=KA6n4A3F_vcEWwELiUNUCbuUnrw91agObX7tuO4cX0Q,9458 +openai/types/responses/response_input_param.py,sha256=8JZVapLUcyo3dkVeef3HcNwEnjOyXQg9j0T5q0rjkAI,9689 openai/types/responses/response_input_text.py,sha256=L7ikIc1qFUSjB9FLeKiy6uwa2y-TkN1bMMgq7PpGOuE,375 openai/types/responses/response_input_text_param.py,sha256=N9k0QajI4grRD44GKOz4qG4nrU_au1kVZWmwX3o0koU,441 openai/types/responses/response_item.py,sha256=TciYLydeQfdkGXqlD_DXd4BG3b5Z1sbT6ydgJ7AIIAc,5918 openai/types/responses/response_item_list.py,sha256=uGGJlbBtuaNadG9PjebjngvtKdXTcI7MIvF05m7qtjc,665 -openai/types/responses/response_mcp_call_arguments_delta_event.py,sha256=oz-FqtII3ZfwKOxGWcWzQiCcNPT_R3dWS8wU5cPNLYs,742 -openai/types/responses/response_mcp_call_arguments_done_event.py,sha256=Gdr6ofOts6UFbw9ob84kUm9ZDGf7KgFHuOz7gxBAOGg,730 -openai/types/responses/response_mcp_call_completed_event.py,sha256=vTaN9eks6TnaX2_SffIrefvtiHYfPSfbK7wXxaiF-IQ,445 -openai/types/responses/response_mcp_call_failed_event.py,sha256=1KULLG9M03vBDMSpRCs8m5DmA-Mhc3ghmDVCekten3g,433 +openai/types/responses/response_mcp_call_arguments_delta_event.py,sha256=dq4_Z156rwK6F9_97sgEOZJHNNPxt6ZfGHX8b_MSWS8,778 +openai/types/responses/response_mcp_call_arguments_done_event.py,sha256=16ETbPuAreyAapg7rKMLWtSOlu6-mxfrkJUfVKiV9dM,752 +openai/types/responses/response_mcp_call_completed_event.py,sha256=ylzTH1FOI2Ha8PABzWOF_ais1_GgMsBmUklaTkR18bU,600 +openai/types/responses/response_mcp_call_failed_event.py,sha256=BmPnCvz72x-lgUK6x8Svmxo1y4ep0FJWYh5ROgYyuCU,582 openai/types/responses/response_mcp_call_in_progress_event.py,sha256=Em1Xni2Ah6m7pF4wsvI_7Q0UMIlHsd75uF0r2Z6RI14,638 -openai/types/responses/response_mcp_list_tools_completed_event.py,sha256=lP31g-jwrmy1D-vMoiAPnv5iuClidUDL30-65yZ8Nb8,467 -openai/types/responses/response_mcp_list_tools_failed_event.py,sha256=Oh8DdfO5J_yohg-k5jOl9MWFOxwaqtCnld4MMYf8E5M,455 -openai/types/responses/response_mcp_list_tools_in_progress_event.py,sha256=pu4ncfaKR6-Qlu9ksjb1vkfxoxzTrn5bEaBqQ1ukVEM,473 -openai/types/responses/response_output_item.py,sha256=M_T0HOjh0POw0R92nMsMHblv4G5GJYays_FxmOHqaKs,4575 +openai/types/responses/response_mcp_list_tools_completed_event.py,sha256=3tLqKFzakR7H9_gPdYBzyLlKmIOrjtWuULex2069EY0,637 +openai/types/responses/response_mcp_list_tools_failed_event.py,sha256=NhjpRJ5jTrsc7qhQYL9aKTdL6FT6LClZB03G25WySQM,604 +openai/types/responses/response_mcp_list_tools_in_progress_event.py,sha256=_mfZNKGLIVvEmvmfBie4Q5QMUmzAiSyjdHQdORfcqWY,646 +openai/types/responses/response_output_item.py,sha256=rZk_B9avi1xxzktkaSXqEduSjHz3VHSKIMIPuvMYbUQ,4669 openai/types/responses/response_output_item_added_event.py,sha256=ct7JDhk7EzyD7oDFVFx1X8T2hblAuDQea3GPXY61Fzw,644 openai/types/responses/response_output_item_done_event.py,sha256=adnds7wknAbha4-USAUosKuQTMFwA58pZC842VUrJO0,652 openai/types/responses/response_output_message.py,sha256=FXVWYe6pptTXvCxwadX602dL4xNjl1GKugTOrlFCBuU,1104 openai/types/responses/response_output_message_param.py,sha256=VfnkR1ClDhUq3uoGsrp-HmmYoDmkY6X3wNcdXC7NHjU,1148 -openai/types/responses/response_output_refusal.py,sha256=9Ni2xOahKhnGVTcYtIUPKQQS5X3Yf7mb_QhkYqmzECA,387 -openai/types/responses/response_output_refusal_param.py,sha256=HGCDx6nfm5l9ZnCCH6sWbPiuB20evywnsbmQsd_05b0,453 -openai/types/responses/response_output_text.py,sha256=NS-Bl1bhQ7Hlxlg7f9sDeVDdnc8EkHVpEj6ceJQmmHo,2678 -openai/types/responses/response_output_text_annotation_added_event.py,sha256=3PbnaN9s58uDznF-ga6W5peMlYlEteqIA7XTQBVuum0,963 -openai/types/responses/response_output_text_param.py,sha256=kQKZfFqeoxB5BEgoORHO3KRPYHSxucalTv77VNABw9c,2961 +openai/types/responses/response_output_refusal.py,sha256=oraX9ZXcD4B7w8t9jcbZPACp-8puytJX_1SSQfTAy_M,388 +openai/types/responses/response_output_refusal_param.py,sha256=kCxtRvVJ6PF75Svmd3JUXyV_W-m9VqV-SpjSe6VUt3Y,454 +openai/types/responses/response_output_text.py,sha256=dZwIefV0zZmQJZ-7jfbgQwu6BJRHuFlG3V_AjxNRy3s,2810 +openai/types/responses/response_output_text_annotation_added_event.py,sha256=xGlSoFd2n9hjLeVKCQPh-yBtI2uS-d3ckJBHHmEoXg4,963 +openai/types/responses/response_output_text_param.py,sha256=H9Hq_D5Unp1Y1m4QDblzpcJiZ-5yDuhCtQSvIYSVddY,3113 +openai/types/responses/response_prompt.py,sha256=hIkV3qs1eSvczvxif_w-QSAIRuUjNc-Iukl447udRQ4,936 +openai/types/responses/response_prompt_param.py,sha256=SC4_UYJudF-inMfJ-PBNRGPOO0gNE9IbQ3ZO0loqzVY,1027 openai/types/responses/response_queued_event.py,sha256=EDgtn58yhHg9784KjOwIK5_qRxZOnRdX25gKNMCt958,508 -openai/types/responses/response_reasoning_delta_event.py,sha256=-spXoAqeEofsw0xM10Ulo9UQYMXX8xCVFcfJWKQUGHY,801 -openai/types/responses/response_reasoning_done_event.py,sha256=vWbyyahV8D2lyia07Cb4qivk1NF9KUZt479MnotjkIw,774 -openai/types/responses/response_reasoning_item.py,sha256=Yu53k8F4FJlH_YtkWi2w7ACY5A4BRGLiI0T6OMAZZkc,1177 -openai/types/responses/response_reasoning_item_param.py,sha256=I9YCrF8qX612JupQYb3K-nX39P-dwgRhJnJbw1_F7hM,1270 -openai/types/responses/response_reasoning_summary_delta_event.py,sha256=bIXoC-0e1QzrhbCkJm7S0CF2QqENjNCl5jmIikoq6dc,855 -openai/types/responses/response_reasoning_summary_done_event.py,sha256=rxj1Z-YhjC_3HSWecFooGsC9_1jzXQwpsHrMZ6nzRrE,814 +openai/types/responses/response_reasoning_item.py,sha256=bPpkc35rJGE83wv4MiUTCHBC1FC86WHQMESna27PDPA,1421 +openai/types/responses/response_reasoning_item_param.py,sha256=k-muDy6hROsWHQXXvBd16_Vf9RRJUoknuIAx2HTX3BU,1534 openai/types/responses/response_reasoning_summary_part_added_event.py,sha256=wFecLMHuG4cmznOQvr9lD31qg9ebU8E6T7IVXxTR3EM,1006 openai/types/responses/response_reasoning_summary_part_done_event.py,sha256=VhU-pOK6fGfCsarOUZ5PD-GTHIvKspOuiWqG709_KMM,997 openai/types/responses/response_reasoning_summary_text_delta_event.py,sha256=GtOuch2QaTXItNJR9hk0Y9TD5s_INjc22a9-e52KfBM,846 openai/types/responses/response_reasoning_summary_text_done_event.py,sha256=_fPOh7N6naMEHcRv42nUlb9vKC9lI8BJ0ll20T1ejzg,833 +openai/types/responses/response_reasoning_text_delta_event.py,sha256=Bv6wVhRCIve81iyl8287xssRVbg1SRZA8__GCx3Lrec,841 +openai/types/responses/response_reasoning_text_done_event.py,sha256=4F30ObYxJKBjjoXbz5Vsij4PVWo_5M3FjPlMTT8Q29Q,788 openai/types/responses/response_refusal_delta_event.py,sha256=ss7m9NX5doTFE6g79k3iBK_z5gXstGFeM2Z2gcO-cPo,770 openai/types/responses/response_refusal_done_event.py,sha256=0iI5jIbuDuHAPnzSK0zWVf8RdjiXTt1HoYEVy4ngIKI,775 -openai/types/responses/response_retrieve_params.py,sha256=3JxduurHl61uWGONfDgfKhVOo6ppYxfIS6PTBjKZZJY,1834 +openai/types/responses/response_retrieve_params.py,sha256=Y_4UacCQ7xUYXc7_QTCJt-zLzIuv-PWocNQ1k0RnPsw,2372 openai/types/responses/response_status.py,sha256=289NTnFcyk0195A2E15KDILXNLpHbfo6q4tcvezYWgs,278 -openai/types/responses/response_stream_event.py,sha256=HfOM5SY4bG3ifDSfMN4XMy6HP299WYZSbEki-sepTnc,6868 -openai/types/responses/response_text_config.py,sha256=rHEatq9T7_rt7D2Zlt9AUjFOQNBg_NTGfoec-7hx444,999 -openai/types/responses/response_text_config_param.py,sha256=kJ2FWZdHPQO9uXFXtZ7wYtj_RdzkPea8SF3OpTLfXDs,1036 -openai/types/responses/response_text_delta_event.py,sha256=bigKDi02n-trLZgBW8Dq6KMaMSvZ9sHecP-wRt8eKkk,769 -openai/types/responses/response_text_done_event.py,sha256=S2zoaEmYylSkfzj0NGGVjUXluC6MXi-It4JqZ-nL9bY,775 +openai/types/responses/response_stream_event.py,sha256=uPEbNTxXOaiEFRVt_PbdeecyfS9rgjaYU7m15NIvSbo,6916 +openai/types/responses/response_text_config.py,sha256=dM28UJfEjLSKBcRHNmBQJjkZSVdZ-vDFccPTVmXYs00,1352 +openai/types/responses/response_text_config_param.py,sha256=348GrnnGUF8fGEfRSW-Vw1wFoqTqQw7FfcgIvc1usCg,1381 +openai/types/responses/response_text_delta_event.py,sha256=e96nx3l-1Q3r9jCGyGgiH-siauP5Ka4LJ8THgUrkEXk,1374 +openai/types/responses/response_text_done_event.py,sha256=PDENYq1-kdZD19eps5qY3-Ih96obk75iUSVO-XUmkig,1380 openai/types/responses/response_usage.py,sha256=DFA8WjqKGl7iGCmZl2G18y48xT82UTZ_NCKm0MAuRDY,945 openai/types/responses/response_web_search_call_completed_event.py,sha256=gWv2xgDeGbvN0oqm96uuecGBy1SkbF_yNA56h5hMlOE,698 openai/types/responses/response_web_search_call_in_progress_event.py,sha256=XxOSK7EI1d0WDkfG5jgU_LIXz72CGixqp4uYW88-dY8,704 openai/types/responses/response_web_search_call_searching_event.py,sha256=sYr9K30DjDeD_h5Jj41OwoTrvUkF--dCQGnQuEnggcw,698 -openai/types/responses/tool.py,sha256=6QpXUyCi2m0hO3eieZd3HUirlm3BW9T0oMexjiiY91I,5364 +openai/types/responses/tool.py,sha256=4UbRtSP3X-LHNwGvGPsX8fhE7qGamOFZR0yQ7f6u2fQ,5927 +openai/types/responses/tool_choice_allowed.py,sha256=I0bB6Gq7aIswr3mWH3TN6aOgtun01Kaopa72AhZJG9I,1023 +openai/types/responses/tool_choice_allowed_param.py,sha256=PMokbtPLR48_b_ZNe0AMyZx-C-OrcwPsbeX31DpoIwE,1107 +openai/types/responses/tool_choice_custom.py,sha256=xi7cPj8VJn4qYXXSkZwFoV_WdYbyGwEVTDIcdHL9AQo,382 +openai/types/responses/tool_choice_custom_param.py,sha256=0ZHVrSkRkVFuCC27k6TQKy2hBoCDt6NB2f8fVnLNrXM,448 openai/types/responses/tool_choice_function.py,sha256=X51PqYW8HMrJcxSkaTCF-uDG_KetD_6WqU1TgmCPR-k,384 openai/types/responses/tool_choice_function_param.py,sha256=UzIJgiqJV7fj0nRDWyzwxpwJmZd0czZVciq4ffvfl_4,450 +openai/types/responses/tool_choice_mcp.py,sha256=iq6CwniC-hOQ9TmH4D4Wo6hT5V0J_4XbZ1TTtf0xEf8,481 +openai/types/responses/tool_choice_mcp_param.py,sha256=E4VcW1YhjYJgYaSw74NuluyM9WylELUZIs7-s4u-N1A,540 openai/types/responses/tool_choice_options.py,sha256=gJHrNT72mRECrN7hQKRHAOA-OS0JJo51YnXvUcMfqMQ,237 -openai/types/responses/tool_choice_types.py,sha256=BZc2_G4B5s9eE6zHDj2YBnkSxEBLr-a7cD9OGXlR8Bc,767 -openai/types/responses/tool_choice_types_param.py,sha256=SD_zM018xHA4V-1XlEw3XzQ6T-nwwQYV7CKNtB-_qrw,869 -openai/types/responses/tool_param.py,sha256=qS-L1hfXNMOu2OXMZqAYHykblLrSgd6-pPk1Yh7MbJQ,5427 +openai/types/responses/tool_choice_types.py,sha256=-3FM-g4h0122Aq2CxEqiNt2A4hjYWPrJJ9MKh_hEROs,740 +openai/types/responses/tool_choice_types_param.py,sha256=_EqjVdOTy8bjKho3ZGdwYAgc11PaXp804jkBvj9dCz4,838 +openai/types/responses/tool_param.py,sha256=zWoYq1kh_CnpUNkdpJqJMCAXBPW9PWHAQj1e0f3Amfc,5896 openai/types/responses/web_search_tool.py,sha256=fxH0MSyeuXljQrWMb5FQeVM0dEiVdfgKEZK95ysbrJA,1455 openai/types/responses/web_search_tool_param.py,sha256=Y99uTiH6B2TDaJeda9bttq7M6Ysx-Po7OZCr6wrC4q0,1482 -openai/types/shared/__init__.py,sha256=vWsaaMGhtO2wF8GSbICC2fDYk0To-olrzMUcfRiYKPU,991 -openai/types/shared/all_models.py,sha256=JQiXx-rIXkNLmkcs7vL8zlp3urPUJNa70gE9-i55eOA,467 -openai/types/shared/chat_model.py,sha256=ke-pqEgbyePPcpFQDwzAljK6RhFvzZwAFtAbe6U_iu4,1575 +openai/types/shared/__init__.py,sha256=EVk-X1P3R7YWmlYmrbpMrjAeZEfVfudF-Tw7fbOC90o,1267 +openai/types/shared/all_models.py,sha256=iwrAzh3I17lQZl0AvG7vpAlGLvEYCZyOtvChufZv8eg,611 +openai/types/shared/chat_model.py,sha256=6VpDw8bZPrezzjN8UfBwKpIWokakgU-12rdLzQulLHo,1731 openai/types/shared/comparison_filter.py,sha256=Y77SD30trdlW0E8BUIMHrugp2N_4I78JJabD2Px6edU,766 openai/types/shared/compound_filter.py,sha256=QhKPeKKdtWvMDDO85YLKUGgdxBQfrYiFimjadAM31Bs,581 +openai/types/shared/custom_tool_input_format.py,sha256=cO7pX1O0k8J6FgERYUqNjafjjYiwS7GCmIw3E_xSiVQ,773 openai/types/shared/error_object.py,sha256=G7SGPZ9Qw3gewTKbi3fK69eM6L2Ur0C2D57N8iEapJA,305 -openai/types/shared/function_definition.py,sha256=8a5uHoIKrkrwTgfwTyE9ly4PgsZ3iLA_yRUAjubTb7Y,1447 +openai/types/shared/function_definition.py,sha256=2F07J5Q7r2Iwg74dC5rarhwWTnt579Y5LUrNc8OdqSc,1475 openai/types/shared/function_parameters.py,sha256=Dkc_pm98zCKyouQmYrl934cK8ZWX7heY_IIyunW8x7c,236 openai/types/shared/metadata.py,sha256=DC0SFof2EeVvFK0EsmQH8W5b_HnpI_bdp47s51E5LKw,213 -openai/types/shared/reasoning.py,sha256=e9daklz1mYX8L3kksgwmRffLs-Rm8h0rA7_2UvTlRG8,1251 -openai/types/shared/reasoning_effort.py,sha256=g_H_wr52XEosQt8OqeKB5v5KbqIV5z5LaoRTxxfKC-c,268 +openai/types/shared/reasoning.py,sha256=FvPkybiYMTz2wqeTAAm0f1nWqUlvTXT1IEnCXzwU95Q,1241 +openai/types/shared/reasoning_effort.py,sha256=oK9lKsN8e2SZ8jV49MZ7PBxbnCP1MxGUQDLYMxlGQYE,279 openai/types/shared/response_format_json_object.py,sha256=E1KGMUZnaj8fLnQXQC8_m9rMp8F6vIqeR9T1RmFNvE4,352 openai/types/shared/response_format_json_schema.py,sha256=SsiLtgrudK4Dvxi2Kx0qUFiBQt26y5uGw_33te7L0Gg,1568 openai/types/shared/response_format_text.py,sha256=p_JASD-xQ4ZveWnAtSoB8a19kVYc9vOZeg6WRMYHKDE,326 -openai/types/shared/responses_model.py,sha256=M0Se0iUQBncS3iF7LAGA0r7tRx1Pc14kCgpmdGFtm14,477 -openai/types/shared_params/__init__.py,sha256=0NOlmiuWaKkKF6oO8RFcnMfhA0tZOc7A4a94iF_BEg0,891 -openai/types/shared_params/chat_model.py,sha256=2OhZt8X-QLqFhkdedm54iWrZ_kn7joExNmlmJMP8cf4,1611 +openai/types/shared/response_format_text_grammar.py,sha256=PvmYxTEH_2r2nJsacTs6_Yw88ED1VbBuQJy_jZVbZwo,418 +openai/types/shared/response_format_text_python.py,sha256=Rfkd4jhzndD0Nw5H6LLnR4Y3MySyTz331MwoxcBL-Ek,342 +openai/types/shared/responses_model.py,sha256=JRAPcWBTgTFtsejFYHdN_MUJ77wk3TkE9Ju6ExkEjiM,621 +openai/types/shared_params/__init__.py,sha256=Jtx94DUXqIaXTb7Sgsx3MPoB9nViBlYEy0DlQ3VcOJU,976 +openai/types/shared_params/chat_model.py,sha256=S0JO3lMtaZ7CG8ZvjYcRls-CF5qLL7AUUDuj1peeKDE,1767 openai/types/shared_params/comparison_filter.py,sha256=ayLPPfnlufcZnpgmWXZ-iuwpacUk5L7_hITuDyegFiQ,832 openai/types/shared_params/compound_filter.py,sha256=dJrqaoOVY8QBEZPCjjD3hhf4qwcJLJ26jgK4N85bEFc,646 -openai/types/shared_params/function_definition.py,sha256=ciMXqn1tFXnp1tg9weJW0uvtyvMLrnph3WXMg4IG1Vk,1482 +openai/types/shared_params/custom_tool_input_format.py,sha256=ifDywFgUir2J2CPm1vyNcGnwl6nJFQsMFF1-qOvAdJA,769 +openai/types/shared_params/function_definition.py,sha256=6JjuRmXIofTv76GCC4XFssqgZw-iKbBazjWqKerfq6Q,1510 openai/types/shared_params/function_parameters.py,sha256=UvxKz_3b9b5ECwWr8RFrIH511htbU2JZsp9Z9BMkF-o,272 openai/types/shared_params/metadata.py,sha256=YCb9eFyy17EuLwtVHjUBUjW2FU8SbWp4NV-aEr_it54,249 -openai/types/shared_params/reasoning.py,sha256=PO6oxPasppSk0Y9BfCDcKgetv-0siotGajfM4Kkt98w,1265 -openai/types/shared_params/reasoning_effort.py,sha256=cS4fD2p16byhxLByCiptb-sZgl-4PSAPlfRvMpGDUo4,304 +openai/types/shared_params/reasoning.py,sha256=iHGUp7rPlMczbNWCJe4Jaz0IMBpRBGaxUfU8qkbbZoA,1255 +openai/types/shared_params/reasoning_effort.py,sha256=d_oflloFU0aeSyJrEZKwpwi0kZNUsg8rEZ4XUU-5eoE,315 openai/types/shared_params/response_format_json_object.py,sha256=aEdVMoEkiEVE_YX6pfj5VqRVqfRIPju5hU-lqNubhVE,398 openai/types/shared_params/response_format_json_schema.py,sha256=iCr7oU2jaHmVAi60mG90uksfv1QQjtvrVT9Vd3paE0k,1529 openai/types/shared_params/response_format_text.py,sha256=N3-JNmbAjreYMj8KBkYb5kZhbblR9ds_6vwYLzUAWDA,372 -openai/types/shared_params/responses_model.py,sha256=SBgN7dLsP-oA7umyIyGnma1Ode5AR6GPoaq51WcjyOg,521 +openai/types/shared_params/responses_model.py,sha256=Q_LwiGeR1Cb2Uikzq6MJDOJOLaM8s1rBVOT9EvryquU,665 openai/types/static_file_chunking_strategy.py,sha256=JmAzT2-9eaG9ZTH8X0jS1IVCOE3Jgi1PzE11oMST3Fc,595 openai/types/static_file_chunking_strategy_object.py,sha256=MTwQ1olGZHoC26xxCKw0U0RvWORIJLgWzNWRQ1V0KmA,424 openai/types/static_file_chunking_strategy_object_param.py,sha256=OwAOs1PT2ygBm4RpzHVVsr-93-Uqjg_IcCoNhtEPT7I,508 @@ -1339,7 +1429,7 @@ openai/types/vector_store.py,sha256=hS30tSgL_s1BC04nIHfZL95-uD60t5Oe44JUQnVD8T8, openai/types/vector_store_create_params.py,sha256=F8uSdmchzrYLc80Xq4B12sqZQXKuSIHMhsgVXu6fn1I,1724 openai/types/vector_store_deleted.py,sha256=BbtnlZ0Z5f4ncDyHLKrEfmY6Uuc0xOg3WBxvMoR8Wxk,307 openai/types/vector_store_list_params.py,sha256=KeSeQaEdqO2EiPEVtq1Nun-uRRdkfwW0P8aHeCmL5zA,1226 -openai/types/vector_store_search_params.py,sha256=XEtL0rVNf0q3Hw6BGGUDWzVobsp421HHLBgo8E4_FXY,1128 +openai/types/vector_store_search_params.py,sha256=OcjEtdl--Z13_SWwc2HYuHebK90YDPVSJ4jKaoUPgh0,1222 openai/types/vector_store_search_response.py,sha256=qlhdAjqLPZg_JQmsqQCzAgT2Pxc2C-vGZmh64kR8y-M,1156 openai/types/vector_store_update_params.py,sha256=RJm0qkqLOsHjhPIiOWPNwkrEIqHjDukyZT52mle4gWc,1240 openai/types/vector_stores/__init__.py,sha256=F_DyW6EqxOJTBPKE5LUSzgTibcZM6axMo-irysr52ro,818 @@ -1352,5 +1442,21 @@ openai/types/vector_stores/file_update_params.py,sha256=NGah01luDW_W3psfsYa3Shls openai/types/vector_stores/vector_store_file.py,sha256=mfmXBL4EqHuaoamRnZ2TS1oX3k1okTREU2vLOrbVglw,2247 openai/types/vector_stores/vector_store_file_batch.py,sha256=MnRehH5Mc0VOhSCZtniMDz8eH72syy2RScmECR_BEhE,1456 openai/types/vector_stores/vector_store_file_deleted.py,sha256=sOds3FSmDBFhe25zoSAz2vHsmG2bo4s2PASgB_M6UU0,321 +openai/types/webhooks/__init__.py,sha256=CKyYGNKsTnKsf1x8vDjngdl7jMV-7qbUUR8aOBwVuMY,1709 +openai/types/webhooks/batch_cancelled_webhook_event.py,sha256=9eadXH42hNN8ZEnkvT1xP4-tXJSSU1EnFo0407UphUU,770 +openai/types/webhooks/batch_completed_webhook_event.py,sha256=HTcSImBaYwlnm8wQdvjPaWzyFIS-KBSSA_E2WkQ1uqg,770 +openai/types/webhooks/batch_expired_webhook_event.py,sha256=fbrvrZrbQZNf_aPBm08HSD99NFaAHVjv4nQg3pNmh9w,756 +openai/types/webhooks/batch_failed_webhook_event.py,sha256=WRxFObJMtp7zPJTl_pa4ppVhKSxHwNMvQdqyR0CqdV8,751 +openai/types/webhooks/eval_run_canceled_webhook_event.py,sha256=hLoN9c6C5QDPJEOLpOInSiGRgqsrtZmwE3NIOjiowtM,757 +openai/types/webhooks/eval_run_failed_webhook_event.py,sha256=rMoiy66aVGgyA2Fxu3ypg1Q1moIj0yDyMsL4ZVJAe6s,743 +openai/types/webhooks/eval_run_succeeded_webhook_event.py,sha256=GFRFtx7JxtUGeWEoQRpbeE3oPoOhPhW1BskJOxuaFI8,758 +openai/types/webhooks/fine_tuning_job_cancelled_webhook_event.py,sha256=kFx4imcbFxTD4L4G6h6kSINfX7yLpo4GQDAuYBGd9wM,802 +openai/types/webhooks/fine_tuning_job_failed_webhook_event.py,sha256=YjfTRr2mvpiJB4IZkzcFNNLwnhrUKVKkLP7RpPgHTnA,783 +openai/types/webhooks/fine_tuning_job_succeeded_webhook_event.py,sha256=wxUg8-llqFJ6K--LI3JHXgTJ1IY2vCD7rO1eq8RWoYo,798 +openai/types/webhooks/response_cancelled_webhook_event.py,sha256=60u91Tcsy_qNaPDqQM_tqWQHXVoSB0-rodF3Llkzzmk,776 +openai/types/webhooks/response_completed_webhook_event.py,sha256=OGSfVNA6Vgugplf4LxXhSkk-ScVvElekoQeksT93z_Q,776 +openai/types/webhooks/response_failed_webhook_event.py,sha256=SWMK_kc1o8WKeQPZudQx7VwU25oAHf_yLR6fKdXKd2E,757 +openai/types/webhooks/response_incomplete_webhook_event.py,sha256=O0LrpnzzxClQf0vQOwF6s_5EAUxM4TdTfEd8uc84iLs,782 +openai/types/webhooks/unwrap_webhook_event.py,sha256=F6m_q_zl5aIyz34TyXTOYEGwLkoMp8lDm4x2iF3n9BY,1914 openai/types/websocket_connection_options.py,sha256=4cAWpv1KKp_9pvnez7pGYzO3s8zh1WvX2xpBhpe-96k,1840 openai/version.py,sha256=cjbXKO8Ut3aiv4YlQnugff7AdC48MpSndcx96q88Yb8,62 diff --git a/portkey_ai/_vendor/openai-1.86.0.dist-info/REQUESTED b/portkey_ai/_vendor/openai-1.99.6.dist-info/REQUESTED similarity index 100% rename from portkey_ai/_vendor/openai-1.86.0.dist-info/REQUESTED rename to portkey_ai/_vendor/openai-1.99.6.dist-info/REQUESTED diff --git a/portkey_ai/_vendor/openai-1.86.0.dist-info/WHEEL b/portkey_ai/_vendor/openai-1.99.6.dist-info/WHEEL similarity index 100% rename from portkey_ai/_vendor/openai-1.86.0.dist-info/WHEEL rename to portkey_ai/_vendor/openai-1.99.6.dist-info/WHEEL diff --git a/portkey_ai/_vendor/openai-1.86.0.dist-info/entry_points.txt b/portkey_ai/_vendor/openai-1.99.6.dist-info/entry_points.txt similarity index 100% rename from portkey_ai/_vendor/openai-1.86.0.dist-info/entry_points.txt rename to portkey_ai/_vendor/openai-1.99.6.dist-info/entry_points.txt diff --git a/portkey_ai/_vendor/openai-1.86.0.dist-info/licenses/LICENSE b/portkey_ai/_vendor/openai-1.99.6.dist-info/licenses/LICENSE similarity index 100% rename from portkey_ai/_vendor/openai-1.86.0.dist-info/licenses/LICENSE rename to portkey_ai/_vendor/openai-1.99.6.dist-info/licenses/LICENSE diff --git a/portkey_ai/_vendor/openai/__init__.py b/portkey_ai/_vendor/openai/__init__.py index 92beeb5d..226fed95 100644 --- a/portkey_ai/_vendor/openai/__init__.py +++ b/portkey_ai/_vendor/openai/__init__.py @@ -30,9 +30,10 @@ LengthFinishReasonError, UnprocessableEntityError, APIResponseValidationError, + InvalidWebhookSignatureError, ContentFilterFinishReasonError, ) -from ._base_client import DefaultHttpxClient, DefaultAsyncHttpxClient +from ._base_client import DefaultHttpxClient, DefaultAioHttpClient, DefaultAsyncHttpxClient from ._utils._logs import setup_logging as _setup_logging from ._legacy_response import HttpxBinaryResponseContent as HttpxBinaryResponseContent @@ -62,6 +63,7 @@ "InternalServerError", "LengthFinishReasonError", "ContentFilterFinishReasonError", + "InvalidWebhookSignatureError", "Timeout", "RequestOptions", "Client", @@ -77,6 +79,7 @@ "DEFAULT_CONNECTION_LIMITS", "DefaultHttpxClient", "DefaultAsyncHttpxClient", + "DefaultAioHttpClient", ] if not _t.TYPE_CHECKING: @@ -120,6 +123,8 @@ project: str | None = None +webhook_secret: str | None = None + base_url: str | _httpx.URL | None = None timeout: float | Timeout | None = DEFAULT_TIMEOUT @@ -182,6 +187,17 @@ def project(self, value: str | None) -> None: # type: ignore project = value + @property # type: ignore + @override + def webhook_secret(self) -> str | None: + return webhook_secret + + @webhook_secret.setter # type: ignore + def webhook_secret(self, value: str | None) -> None: # type: ignore + global webhook_secret + + webhook_secret = value + @property @override def base_url(self) -> _httpx.URL: @@ -334,6 +350,7 @@ def _load_client() -> OpenAI: # type: ignore[reportUnusedFunction] api_key=api_key, organization=organization, project=project, + webhook_secret=webhook_secret, base_url=base_url, timeout=timeout, max_retries=max_retries, @@ -362,6 +379,7 @@ def _reset_client() -> None: # type: ignore[reportUnusedFunction] models as models, batches as batches, uploads as uploads, + webhooks as webhooks, responses as responses, containers as containers, embeddings as embeddings, diff --git a/portkey_ai/_vendor/openai/_client.py b/portkey_ai/_vendor/openai/_client.py index 4ed9a2f5..ed9b46f4 100644 --- a/portkey_ai/_vendor/openai/_client.py +++ b/portkey_ai/_vendor/openai/_client.py @@ -57,6 +57,7 @@ from .resources.images import Images, AsyncImages from .resources.models import Models, AsyncModels from .resources.batches import Batches, AsyncBatches + from .resources.webhooks import Webhooks, AsyncWebhooks from .resources.beta.beta import Beta, AsyncBeta from .resources.chat.chat import Chat, AsyncChat from .resources.embeddings import Embeddings, AsyncEmbeddings @@ -78,6 +79,7 @@ class OpenAI(SyncAPIClient): api_key: str organization: str | None project: str | None + webhook_secret: str | None websocket_base_url: str | httpx.URL | None """Base URL for WebSocket connections. @@ -93,6 +95,7 @@ def __init__( api_key: str | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, base_url: str | httpx.URL | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN, @@ -119,6 +122,7 @@ def __init__( - `api_key` from `OPENAI_API_KEY` - `organization` from `OPENAI_ORG_ID` - `project` from `OPENAI_PROJECT_ID` + - `webhook_secret` from `OPENAI_WEBHOOK_SECRET` """ if api_key is None: api_key = os.environ.get("OPENAI_API_KEY") @@ -136,6 +140,10 @@ def __init__( project = os.environ.get("OPENAI_PROJECT_ID") self.project = project + if webhook_secret is None: + webhook_secret = os.environ.get("OPENAI_WEBHOOK_SECRET") + self.webhook_secret = webhook_secret + self.websocket_base_url = websocket_base_url if base_url is None: @@ -216,6 +224,12 @@ def vector_stores(self) -> VectorStores: return VectorStores(self) + @cached_property + def webhooks(self) -> Webhooks: + from .resources.webhooks import Webhooks + + return Webhooks(self) + @cached_property def beta(self) -> Beta: from .resources.beta import Beta @@ -269,6 +283,9 @@ def qs(self) -> Querystring: @override def auth_headers(self) -> dict[str, str]: api_key = self.api_key + if not api_key: + # if the api key is an empty string, encoding the header will fail + return {} return {"Authorization": f"Bearer {api_key}"} @property @@ -288,6 +305,7 @@ def copy( api_key: str | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, @@ -325,6 +343,7 @@ def copy( api_key=api_key or self.api_key, organization=organization or self.organization, project=project or self.project, + webhook_secret=webhook_secret or self.webhook_secret, websocket_base_url=websocket_base_url or self.websocket_base_url, base_url=base_url or self.base_url, timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, @@ -379,6 +398,7 @@ class AsyncOpenAI(AsyncAPIClient): api_key: str organization: str | None project: str | None + webhook_secret: str | None websocket_base_url: str | httpx.URL | None """Base URL for WebSocket connections. @@ -394,6 +414,7 @@ def __init__( api_key: str | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, base_url: str | httpx.URL | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN, @@ -420,6 +441,7 @@ def __init__( - `api_key` from `OPENAI_API_KEY` - `organization` from `OPENAI_ORG_ID` - `project` from `OPENAI_PROJECT_ID` + - `webhook_secret` from `OPENAI_WEBHOOK_SECRET` """ if api_key is None: api_key = os.environ.get("OPENAI_API_KEY") @@ -437,6 +459,10 @@ def __init__( project = os.environ.get("OPENAI_PROJECT_ID") self.project = project + if webhook_secret is None: + webhook_secret = os.environ.get("OPENAI_WEBHOOK_SECRET") + self.webhook_secret = webhook_secret + self.websocket_base_url = websocket_base_url if base_url is None: @@ -517,6 +543,12 @@ def vector_stores(self) -> AsyncVectorStores: return AsyncVectorStores(self) + @cached_property + def webhooks(self) -> AsyncWebhooks: + from .resources.webhooks import AsyncWebhooks + + return AsyncWebhooks(self) + @cached_property def beta(self) -> AsyncBeta: from .resources.beta import AsyncBeta @@ -570,6 +602,9 @@ def qs(self) -> Querystring: @override def auth_headers(self) -> dict[str, str]: api_key = self.api_key + if not api_key: + # if the api key is an empty string, encoding the header will fail + return {} return {"Authorization": f"Bearer {api_key}"} @property @@ -589,6 +624,7 @@ def copy( api_key: str | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, @@ -626,6 +662,7 @@ def copy( api_key=api_key or self.api_key, organization=organization or self.organization, project=project or self.project, + webhook_secret=webhook_secret or self.webhook_secret, websocket_base_url=websocket_base_url or self.websocket_base_url, base_url=base_url or self.base_url, timeout=self.timeout if isinstance(timeout, NotGiven) else timeout, diff --git a/portkey_ai/_vendor/openai/_exceptions.py b/portkey_ai/_vendor/openai/_exceptions.py index e326ed95..09016dfe 100644 --- a/portkey_ai/_vendor/openai/_exceptions.py +++ b/portkey_ai/_vendor/openai/_exceptions.py @@ -24,6 +24,7 @@ "InternalServerError", "LengthFinishReasonError", "ContentFilterFinishReasonError", + "InvalidWebhookSignatureError", ] @@ -154,3 +155,7 @@ def __init__(self) -> None: super().__init__( f"Could not parse response content as the request was rejected by the content filter", ) + + +class InvalidWebhookSignatureError(ValueError): + """Raised when a webhook signature is invalid, meaning the computed signature does not match the expected signature.""" diff --git a/portkey_ai/_vendor/openai/_files.py b/portkey_ai/_vendor/openai/_files.py index 801a0d29..7b23ca08 100644 --- a/portkey_ai/_vendor/openai/_files.py +++ b/portkey_ai/_vendor/openai/_files.py @@ -69,12 +69,12 @@ def _transform_file(file: FileTypes) -> HttpxFileTypes: return file if is_tuple_t(file): - return (file[0], _read_file_content(file[1]), *file[2:]) + return (file[0], read_file_content(file[1]), *file[2:]) raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple") -def _read_file_content(file: FileContent) -> HttpxFileContent: +def read_file_content(file: FileContent) -> HttpxFileContent: if isinstance(file, os.PathLike): return pathlib.Path(file).read_bytes() return file @@ -111,12 +111,12 @@ async def _async_transform_file(file: FileTypes) -> HttpxFileTypes: return file if is_tuple_t(file): - return (file[0], await _async_read_file_content(file[1]), *file[2:]) + return (file[0], await async_read_file_content(file[1]), *file[2:]) raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple") -async def _async_read_file_content(file: FileContent) -> HttpxFileContent: +async def async_read_file_content(file: FileContent) -> HttpxFileContent: if isinstance(file, os.PathLike): return await anyio.Path(file).read_bytes() diff --git a/portkey_ai/_vendor/openai/_models.py b/portkey_ai/_vendor/openai/_models.py index 065e8da7..d84d51d9 100644 --- a/portkey_ai/_vendor/openai/_models.py +++ b/portkey_ai/_vendor/openai/_models.py @@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, Any, Type, Tuple, Union, Generic, TypeVar, Callable, Optional, cast from datetime import date, datetime from typing_extensions import ( + List, Unpack, Literal, ClassVar, @@ -232,14 +233,18 @@ def construct( # pyright: ignore[reportIncompatibleMethodOverride] else: fields_values[name] = field_get_default(field) + extra_field_type = _get_extra_fields_type(__cls) + _extra = {} for key, value in values.items(): if key not in model_fields: + parsed = construct_type(value=value, type_=extra_field_type) if extra_field_type is not None else value + if PYDANTIC_V2: - _extra[key] = value + _extra[key] = parsed else: _fields_set.add(key) - fields_values[key] = value + fields_values[key] = parsed object.__setattr__(m, "__dict__", fields_values) @@ -391,7 +396,24 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object: if type_ is None: raise RuntimeError(f"Unexpected field type is None for {key}") - return construct_type(value=value, type_=type_) + return construct_type(value=value, type_=type_, metadata=getattr(field, "metadata", None)) + + +def _get_extra_fields_type(cls: type[pydantic.BaseModel]) -> type | None: + if not PYDANTIC_V2: + # TODO + return None + + schema = cls.__pydantic_core_schema__ + if schema["type"] == "model": + fields = schema["schema"] + if fields["type"] == "model-fields": + extras = fields.get("extras_schema") + if extras and "cls" in extras: + # mypy can't narrow the type + return extras["cls"] # type: ignore[no-any-return] + + return None def is_basemodel(type_: type) -> bool: @@ -445,7 +467,7 @@ def construct_type_unchecked(*, value: object, type_: type[_T]) -> _T: return cast(_T, construct_type(value=value, type_=type_)) -def construct_type(*, value: object, type_: object) -> object: +def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]] = None) -> object: """Loose coercion to the expected type with construction of nested values. If the given value does not match the expected type then it is returned as-is. @@ -463,8 +485,10 @@ def construct_type(*, value: object, type_: object) -> object: type_ = type_.__value__ # type: ignore[unreachable] # unwrap `Annotated[T, ...]` -> `T` - if is_annotated_type(type_): - meta: tuple[Any, ...] = get_args(type_)[1:] + if metadata is not None and len(metadata) > 0: + meta: tuple[Any, ...] = tuple(metadata) + elif is_annotated_type(type_): + meta = get_args(type_)[1:] type_ = extract_type_arg(type_, 0) else: meta = tuple() diff --git a/portkey_ai/_vendor/openai/_module_client.py b/portkey_ai/_vendor/openai/_module_client.py index fb7c7549..a80e9393 100644 --- a/portkey_ai/_vendor/openai/_module_client.py +++ b/portkey_ai/_vendor/openai/_module_client.py @@ -10,6 +10,7 @@ from .resources.images import Images from .resources.models import Models from .resources.batches import Batches + from .resources.webhooks import Webhooks from .resources.beta.beta import Beta from .resources.chat.chat import Chat from .resources.embeddings import Embeddings @@ -81,6 +82,12 @@ def __load__(self) -> Uploads: return _load_client().uploads +class WebhooksProxy(LazyProxy["Webhooks"]): + @override + def __load__(self) -> Webhooks: + return _load_client().webhooks + + class ResponsesProxy(LazyProxy["Responses"]): @override def __load__(self) -> Responses: @@ -132,6 +139,7 @@ def __load__(self) -> VectorStores: models: Models = ModelsProxy().__as_proxied__() batches: Batches = BatchesProxy().__as_proxied__() uploads: Uploads = UploadsProxy().__as_proxied__() +webhooks: Webhooks = WebhooksProxy().__as_proxied__() responses: Responses = ResponsesProxy().__as_proxied__() embeddings: Embeddings = EmbeddingsProxy().__as_proxied__() containers: Containers = ContainersProxy().__as_proxied__() diff --git a/portkey_ai/_vendor/openai/_streaming.py b/portkey_ai/_vendor/openai/_streaming.py index f5621f92..f586de74 100644 --- a/portkey_ai/_vendor/openai/_streaming.py +++ b/portkey_ai/_vendor/openai/_streaming.py @@ -59,9 +59,11 @@ def __stream__(self) -> Iterator[_T]: if sse.data.startswith("[DONE]"): break - if sse.event is None or sse.event.startswith("response.") or sse.event.startswith("transcript."): + # we have to special case the Assistants `thread.` events since we won't have an "event" key in the data + if sse.event and sse.event.startswith("thread."): data = sse.json() - if is_mapping(data) and data.get("error"): + + if sse.event == "error" and is_mapping(data) and data.get("error"): message = None error = data.get("error") if is_mapping(error): @@ -75,12 +77,10 @@ def __stream__(self) -> Iterator[_T]: body=data["error"], ) - yield process_data(data=data, cast_to=cast_to, response=response) - + yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response) else: data = sse.json() - - if sse.event == "error" and is_mapping(data) and data.get("error"): + if is_mapping(data) and data.get("error"): message = None error = data.get("error") if is_mapping(error): @@ -94,7 +94,7 @@ def __stream__(self) -> Iterator[_T]: body=data["error"], ) - yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response) + yield process_data(data=data, cast_to=cast_to, response=response) # Ensure the entire stream is consumed for _sse in iterator: @@ -161,9 +161,11 @@ async def __stream__(self) -> AsyncIterator[_T]: if sse.data.startswith("[DONE]"): break - if sse.event is None or sse.event.startswith("response.") or sse.event.startswith("transcript."): + # we have to special case the Assistants `thread.` events since we won't have an "event" key in the data + if sse.event and sse.event.startswith("thread."): data = sse.json() - if is_mapping(data) and data.get("error"): + + if sse.event == "error" and is_mapping(data) and data.get("error"): message = None error = data.get("error") if is_mapping(error): @@ -177,12 +179,10 @@ async def __stream__(self) -> AsyncIterator[_T]: body=data["error"], ) - yield process_data(data=data, cast_to=cast_to, response=response) - + yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response) else: data = sse.json() - - if sse.event == "error" and is_mapping(data) and data.get("error"): + if is_mapping(data) and data.get("error"): message = None error = data.get("error") if is_mapping(error): @@ -196,7 +196,7 @@ async def __stream__(self) -> AsyncIterator[_T]: body=data["error"], ) - yield process_data(data={"data": data, "event": sse.event}, cast_to=cast_to, response=response) + yield process_data(data=data, cast_to=cast_to, response=response) # Ensure the entire stream is consumed async for _sse in iterator: diff --git a/portkey_ai/_vendor/openai/_version.py b/portkey_ai/_vendor/openai/_version.py index c0f313e3..eed63aad 100644 --- a/portkey_ai/_vendor/openai/_version.py +++ b/portkey_ai/_vendor/openai/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "openai" -__version__ = "1.86.0" # x-release-please-version +__version__ = "1.99.6" # x-release-please-version diff --git a/portkey_ai/_vendor/openai/cli/_api/_main.py b/portkey_ai/_vendor/openai/cli/_api/_main.py index fe5a5e6f..b04a3e52 100644 --- a/portkey_ai/_vendor/openai/cli/_api/_main.py +++ b/portkey_ai/_vendor/openai/cli/_api/_main.py @@ -2,7 +2,7 @@ from argparse import ArgumentParser -from . import chat, audio, files, image, models, completions +from . import chat, audio, files, image, models, completions, fine_tuning def register_commands(parser: ArgumentParser) -> None: @@ -14,3 +14,4 @@ def register_commands(parser: ArgumentParser) -> None: files.register(subparsers) models.register(subparsers) completions.register(subparsers) + fine_tuning.register(subparsers) diff --git a/portkey_ai/_vendor/openai/cli/_api/fine_tuning/__init__.py b/portkey_ai/_vendor/openai/cli/_api/fine_tuning/__init__.py new file mode 100644 index 00000000..11a2dfcc --- /dev/null +++ b/portkey_ai/_vendor/openai/cli/_api/fine_tuning/__init__.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING +from argparse import ArgumentParser + +from . import jobs + +if TYPE_CHECKING: + from argparse import _SubParsersAction + + +def register(subparser: _SubParsersAction[ArgumentParser]) -> None: + jobs.register(subparser) diff --git a/portkey_ai/_vendor/openai/cli/_api/fine_tuning/jobs.py b/portkey_ai/_vendor/openai/cli/_api/fine_tuning/jobs.py new file mode 100644 index 00000000..806fa0f7 --- /dev/null +++ b/portkey_ai/_vendor/openai/cli/_api/fine_tuning/jobs.py @@ -0,0 +1,169 @@ +from __future__ import annotations + +import json +from typing import TYPE_CHECKING +from argparse import ArgumentParser + +from ..._utils import get_client, print_model +from ...._types import NOT_GIVEN, NotGivenOr +from ..._models import BaseModel +from ....pagination import SyncCursorPage +from ....types.fine_tuning import ( + FineTuningJob, + FineTuningJobEvent, +) + +if TYPE_CHECKING: + from argparse import _SubParsersAction + + +def register(subparser: _SubParsersAction[ArgumentParser]) -> None: + sub = subparser.add_parser("fine_tuning.jobs.create") + sub.add_argument( + "-m", + "--model", + help="The model to fine-tune.", + required=True, + ) + sub.add_argument( + "-F", + "--training-file", + help="The training file to fine-tune the model on.", + required=True, + ) + sub.add_argument( + "-H", + "--hyperparameters", + help="JSON string of hyperparameters to use for fine-tuning.", + type=str, + ) + sub.add_argument( + "-s", + "--suffix", + help="A suffix to add to the fine-tuned model name.", + ) + sub.add_argument( + "-V", + "--validation-file", + help="The validation file to use for fine-tuning.", + ) + sub.set_defaults(func=CLIFineTuningJobs.create, args_model=CLIFineTuningJobsCreateArgs) + + sub = subparser.add_parser("fine_tuning.jobs.retrieve") + sub.add_argument( + "-i", + "--id", + help="The ID of the fine-tuning job to retrieve.", + required=True, + ) + sub.set_defaults(func=CLIFineTuningJobs.retrieve, args_model=CLIFineTuningJobsRetrieveArgs) + + sub = subparser.add_parser("fine_tuning.jobs.list") + sub.add_argument( + "-a", + "--after", + help="Identifier for the last job from the previous pagination request. If provided, only jobs created after this job will be returned.", + ) + sub.add_argument( + "-l", + "--limit", + help="Number of fine-tuning jobs to retrieve.", + type=int, + ) + sub.set_defaults(func=CLIFineTuningJobs.list, args_model=CLIFineTuningJobsListArgs) + + sub = subparser.add_parser("fine_tuning.jobs.cancel") + sub.add_argument( + "-i", + "--id", + help="The ID of the fine-tuning job to cancel.", + required=True, + ) + sub.set_defaults(func=CLIFineTuningJobs.cancel, args_model=CLIFineTuningJobsCancelArgs) + + sub = subparser.add_parser("fine_tuning.jobs.list_events") + sub.add_argument( + "-i", + "--id", + help="The ID of the fine-tuning job to list events for.", + required=True, + ) + sub.add_argument( + "-a", + "--after", + help="Identifier for the last event from the previous pagination request. If provided, only events created after this event will be returned.", + ) + sub.add_argument( + "-l", + "--limit", + help="Number of fine-tuning job events to retrieve.", + type=int, + ) + sub.set_defaults(func=CLIFineTuningJobs.list_events, args_model=CLIFineTuningJobsListEventsArgs) + + +class CLIFineTuningJobsCreateArgs(BaseModel): + model: str + training_file: str + hyperparameters: NotGivenOr[str] = NOT_GIVEN + suffix: NotGivenOr[str] = NOT_GIVEN + validation_file: NotGivenOr[str] = NOT_GIVEN + + +class CLIFineTuningJobsRetrieveArgs(BaseModel): + id: str + + +class CLIFineTuningJobsListArgs(BaseModel): + after: NotGivenOr[str] = NOT_GIVEN + limit: NotGivenOr[int] = NOT_GIVEN + + +class CLIFineTuningJobsCancelArgs(BaseModel): + id: str + + +class CLIFineTuningJobsListEventsArgs(BaseModel): + id: str + after: NotGivenOr[str] = NOT_GIVEN + limit: NotGivenOr[int] = NOT_GIVEN + + +class CLIFineTuningJobs: + @staticmethod + def create(args: CLIFineTuningJobsCreateArgs) -> None: + hyperparameters = json.loads(str(args.hyperparameters)) if args.hyperparameters is not NOT_GIVEN else NOT_GIVEN + fine_tuning_job: FineTuningJob = get_client().fine_tuning.jobs.create( + model=args.model, + training_file=args.training_file, + hyperparameters=hyperparameters, + suffix=args.suffix, + validation_file=args.validation_file, + ) + print_model(fine_tuning_job) + + @staticmethod + def retrieve(args: CLIFineTuningJobsRetrieveArgs) -> None: + fine_tuning_job: FineTuningJob = get_client().fine_tuning.jobs.retrieve(fine_tuning_job_id=args.id) + print_model(fine_tuning_job) + + @staticmethod + def list(args: CLIFineTuningJobsListArgs) -> None: + fine_tuning_jobs: SyncCursorPage[FineTuningJob] = get_client().fine_tuning.jobs.list( + after=args.after or NOT_GIVEN, limit=args.limit or NOT_GIVEN + ) + print_model(fine_tuning_jobs) + + @staticmethod + def cancel(args: CLIFineTuningJobsCancelArgs) -> None: + fine_tuning_job: FineTuningJob = get_client().fine_tuning.jobs.cancel(fine_tuning_job_id=args.id) + print_model(fine_tuning_job) + + @staticmethod + def list_events(args: CLIFineTuningJobsListEventsArgs) -> None: + fine_tuning_job_events: SyncCursorPage[FineTuningJobEvent] = get_client().fine_tuning.jobs.list_events( + fine_tuning_job_id=args.id, + after=args.after or NOT_GIVEN, + limit=args.limit or NOT_GIVEN, + ) + print_model(fine_tuning_job_events) diff --git a/portkey_ai/_vendor/openai/lib/_parsing/_completions.py b/portkey_ai/_vendor/openai/lib/_parsing/_completions.py index c160070b..fc0bd05e 100644 --- a/portkey_ai/_vendor/openai/lib/_parsing/_completions.py +++ b/portkey_ai/_vendor/openai/lib/_parsing/_completions.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import logging from typing import TYPE_CHECKING, Any, Iterable, cast from typing_extensions import TypeVar, TypeGuard, assert_never @@ -19,14 +20,15 @@ ParsedChatCompletion, ChatCompletionMessage, ParsedFunctionToolCall, - ChatCompletionToolParam, ParsedChatCompletionMessage, + ChatCompletionToolUnionParam, + ChatCompletionFunctionToolParam, completion_create_params, ) from ..._exceptions import LengthFinishReasonError, ContentFilterFinishReasonError from ...types.shared_params import FunctionDefinition from ...types.chat.completion_create_params import ResponseFormat as ResponseFormatParam -from ...types.chat.chat_completion_message_tool_call import Function +from ...types.chat.chat_completion_message_function_tool_call import Function ResponseFormatT = TypeVar( "ResponseFormatT", @@ -35,12 +37,36 @@ ) _default_response_format: None = None +log: logging.Logger = logging.getLogger("openai.lib.parsing") + + +def is_strict_chat_completion_tool_param( + tool: ChatCompletionToolUnionParam, +) -> TypeGuard[ChatCompletionFunctionToolParam]: + """Check if the given tool is a strict ChatCompletionFunctionToolParam.""" + if not tool["type"] == "function": + return False + if tool["function"].get("strict") is not True: + return False + + return True + + +def select_strict_chat_completion_tools( + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, +) -> Iterable[ChatCompletionFunctionToolParam] | NotGiven: + """Select only the strict ChatCompletionFunctionToolParams from the given tools.""" + if not is_given(tools): + return NOT_GIVEN + + return [t for t in tools if is_strict_chat_completion_tool_param(t)] + def validate_input_tools( - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, -) -> None: + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, +) -> Iterable[ChatCompletionFunctionToolParam] | NotGiven: if not is_given(tools): - return + return NOT_GIVEN for tool in tools: if tool["type"] != "function": @@ -54,11 +80,13 @@ def validate_input_tools( f"`{tool['function']['name']}` is not strict. Only `strict` function tools can be auto-parsed" ) + return cast(Iterable[ChatCompletionFunctionToolParam], tools) + def parse_chat_completion( *, response_format: type[ResponseFormatT] | completion_create_params.ResponseFormat | NotGiven, - input_tools: Iterable[ChatCompletionToolParam] | NotGiven, + input_tools: Iterable[ChatCompletionToolUnionParam] | NotGiven, chat_completion: ChatCompletion | ParsedChatCompletion[object], ) -> ParsedChatCompletion[ResponseFormatT]: if is_given(input_tools): @@ -95,6 +123,14 @@ def parse_chat_completion( type_=ParsedFunctionToolCall, ) ) + elif tool_call.type == "custom": + # warn user that custom tool calls are not callable here + log.warning( + "Custom tool calls are not callable. Ignoring tool call: %s - %s", + tool_call.id, + tool_call.custom.name, + stacklevel=2, + ) elif TYPE_CHECKING: # type: ignore[unreachable] assert_never(tool_call) else: @@ -129,13 +165,15 @@ def parse_chat_completion( ) -def get_input_tool_by_name(*, input_tools: list[ChatCompletionToolParam], name: str) -> ChatCompletionToolParam | None: - return next((t for t in input_tools if t.get("function", {}).get("name") == name), None) +def get_input_tool_by_name( + *, input_tools: list[ChatCompletionToolUnionParam], name: str +) -> ChatCompletionFunctionToolParam | None: + return next((t for t in input_tools if t["type"] == "function" and t.get("function", {}).get("name") == name), None) def parse_function_tool_arguments( - *, input_tools: list[ChatCompletionToolParam], function: Function | ParsedFunction -) -> object: + *, input_tools: list[ChatCompletionToolUnionParam], function: Function | ParsedFunction +) -> object | None: input_tool = get_input_tool_by_name(input_tools=input_tools, name=function.name) if not input_tool: return None @@ -149,7 +187,7 @@ def parse_function_tool_arguments( if not input_fn.get("strict"): return None - return json.loads(function.arguments) + return json.loads(function.arguments) # type: ignore[no-any-return] def maybe_parse_content( @@ -180,7 +218,7 @@ def solve_response_format_t( def has_parseable_input( *, response_format: type | ResponseFormatParam | NotGiven, - input_tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + input_tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, ) -> bool: if has_rich_response_format(response_format): return True @@ -208,7 +246,10 @@ def is_response_format_param(response_format: object) -> TypeGuard[ResponseForma return is_dict(response_format) -def is_parseable_tool(input_tool: ChatCompletionToolParam) -> bool: +def is_parseable_tool(input_tool: ChatCompletionToolUnionParam) -> bool: + if input_tool["type"] != "function": + return False + input_fn = cast(object, input_tool.get("function")) if isinstance(input_fn, PydanticFunctionTool): return True diff --git a/portkey_ai/_vendor/openai/lib/_parsing/_responses.py b/portkey_ai/_vendor/openai/lib/_parsing/_responses.py index 41be1d37..2a30ac83 100644 --- a/portkey_ai/_vendor/openai/lib/_parsing/_responses.py +++ b/portkey_ai/_vendor/openai/lib/_parsing/_responses.py @@ -110,6 +110,7 @@ def parse_response( or output.type == "local_shell_call" or output.type == "mcp_list_tools" or output.type == "exec" + or output.type == "custom_tool_call" ): output_list.append(output) elif TYPE_CHECKING: # type: ignore diff --git a/portkey_ai/_vendor/openai/lib/_tools.py b/portkey_ai/_vendor/openai/lib/_tools.py index 415d7500..4070ad63 100644 --- a/portkey_ai/_vendor/openai/lib/_tools.py +++ b/portkey_ai/_vendor/openai/lib/_tools.py @@ -5,7 +5,7 @@ import pydantic from ._pydantic import to_strict_json_schema -from ..types.chat import ChatCompletionToolParam +from ..types.chat import ChatCompletionFunctionToolParam from ..types.shared_params import FunctionDefinition from ..types.responses.function_tool_param import FunctionToolParam as ResponsesFunctionToolParam @@ -42,7 +42,7 @@ def pydantic_function_tool( *, name: str | None = None, # inferred from class name by default description: str | None = None, # inferred from class docstring by default -) -> ChatCompletionToolParam: +) -> ChatCompletionFunctionToolParam: if description is None: # note: we intentionally don't use `.getdoc()` to avoid # including pydantic's docstrings diff --git a/portkey_ai/_vendor/openai/lib/azure.py b/portkey_ai/_vendor/openai/lib/azure.py index 655dd71d..a994e425 100644 --- a/portkey_ai/_vendor/openai/lib/azure.py +++ b/portkey_ai/_vendor/openai/lib/azure.py @@ -98,6 +98,7 @@ def __init__( azure_ad_token: str | None = None, azure_ad_token_provider: AzureADTokenProvider | None = None, organization: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, max_retries: int = DEFAULT_MAX_RETRIES, @@ -117,6 +118,7 @@ def __init__( azure_ad_token: str | None = None, azure_ad_token_provider: AzureADTokenProvider | None = None, organization: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, max_retries: int = DEFAULT_MAX_RETRIES, @@ -136,6 +138,7 @@ def __init__( azure_ad_token: str | None = None, azure_ad_token_provider: AzureADTokenProvider | None = None, organization: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, max_retries: int = DEFAULT_MAX_RETRIES, @@ -156,6 +159,7 @@ def __init__( azure_ad_token_provider: AzureADTokenProvider | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, base_url: str | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, @@ -234,6 +238,7 @@ def __init__( api_key=api_key, organization=organization, project=project, + webhook_secret=webhook_secret, base_url=base_url, timeout=timeout, max_retries=max_retries, @@ -256,6 +261,7 @@ def copy( api_key: str | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, api_version: str | None = None, azure_ad_token: str | None = None, @@ -277,6 +283,7 @@ def copy( api_key=api_key, organization=organization, project=project, + webhook_secret=webhook_secret, websocket_base_url=websocket_base_url, base_url=base_url, timeout=timeout, @@ -370,6 +377,7 @@ def __init__( azure_ad_token_provider: AsyncAzureADTokenProvider | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, max_retries: int = DEFAULT_MAX_RETRIES, @@ -390,6 +398,7 @@ def __init__( azure_ad_token_provider: AsyncAzureADTokenProvider | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, max_retries: int = DEFAULT_MAX_RETRIES, @@ -410,6 +419,7 @@ def __init__( azure_ad_token_provider: AsyncAzureADTokenProvider | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, max_retries: int = DEFAULT_MAX_RETRIES, @@ -430,6 +440,7 @@ def __init__( azure_ad_token_provider: AsyncAzureADTokenProvider | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, base_url: str | None = None, websocket_base_url: str | httpx.URL | None = None, timeout: float | Timeout | None | NotGiven = NOT_GIVEN, @@ -508,6 +519,7 @@ def __init__( api_key=api_key, organization=organization, project=project, + webhook_secret=webhook_secret, base_url=base_url, timeout=timeout, max_retries=max_retries, @@ -530,6 +542,7 @@ def copy( api_key: str | None = None, organization: str | None = None, project: str | None = None, + webhook_secret: str | None = None, websocket_base_url: str | httpx.URL | None = None, api_version: str | None = None, azure_ad_token: str | None = None, @@ -551,6 +564,7 @@ def copy( api_key=api_key, organization=organization, project=project, + webhook_secret=webhook_secret, websocket_base_url=websocket_base_url, base_url=base_url, timeout=timeout, diff --git a/portkey_ai/_vendor/openai/lib/streaming/chat/_completions.py b/portkey_ai/_vendor/openai/lib/streaming/chat/_completions.py index a7b70c32..52a6a550 100644 --- a/portkey_ai/_vendor/openai/lib/streaming/chat/_completions.py +++ b/portkey_ai/_vendor/openai/lib/streaming/chat/_completions.py @@ -37,7 +37,7 @@ parse_function_tool_arguments, ) from ...._streaming import Stream, AsyncStream -from ....types.chat import ChatCompletionChunk, ParsedChatCompletion, ChatCompletionToolParam +from ....types.chat import ChatCompletionChunk, ParsedChatCompletion, ChatCompletionToolUnionParam from ...._exceptions import LengthFinishReasonError, ContentFilterFinishReasonError from ....types.chat.chat_completion import ChoiceLogprobs from ....types.chat.chat_completion_chunk import Choice as ChoiceChunk @@ -58,7 +58,7 @@ def __init__( *, raw_stream: Stream[ChatCompletionChunk], response_format: type[ResponseFormatT] | ResponseFormatParam | NotGiven, - input_tools: Iterable[ChatCompletionToolParam] | NotGiven, + input_tools: Iterable[ChatCompletionToolUnionParam] | NotGiven, ) -> None: self._raw_stream = raw_stream self._response = raw_stream.response @@ -128,7 +128,7 @@ class ChatCompletionStreamManager(Generic[ResponseFormatT]): Usage: ```py - with client.beta.chat.completions.stream(...) as stream: + with client.chat.completions.stream(...) as stream: for event in stream: ... ``` @@ -139,7 +139,7 @@ def __init__( api_request: Callable[[], Stream[ChatCompletionChunk]], *, response_format: type[ResponseFormatT] | ResponseFormatParam | NotGiven, - input_tools: Iterable[ChatCompletionToolParam] | NotGiven, + input_tools: Iterable[ChatCompletionToolUnionParam] | NotGiven, ) -> None: self.__stream: ChatCompletionStream[ResponseFormatT] | None = None self.__api_request = api_request @@ -181,7 +181,7 @@ def __init__( *, raw_stream: AsyncStream[ChatCompletionChunk], response_format: type[ResponseFormatT] | ResponseFormatParam | NotGiven, - input_tools: Iterable[ChatCompletionToolParam] | NotGiven, + input_tools: Iterable[ChatCompletionToolUnionParam] | NotGiven, ) -> None: self._raw_stream = raw_stream self._response = raw_stream.response @@ -251,7 +251,7 @@ class AsyncChatCompletionStreamManager(Generic[ResponseFormatT]): Usage: ```py - async with client.beta.chat.completions.stream(...) as stream: + async with client.chat.completions.stream(...) as stream: for event in stream: ... ``` @@ -262,7 +262,7 @@ def __init__( api_request: Awaitable[AsyncStream[ChatCompletionChunk]], *, response_format: type[ResponseFormatT] | ResponseFormatParam | NotGiven, - input_tools: Iterable[ChatCompletionToolParam] | NotGiven, + input_tools: Iterable[ChatCompletionToolUnionParam] | NotGiven, ) -> None: self.__stream: AsyncChatCompletionStream[ResponseFormatT] | None = None self.__api_request = api_request @@ -314,7 +314,7 @@ class ChatCompletionStreamState(Generic[ResponseFormatT]): def __init__( self, *, - input_tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + input_tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, response_format: type[ResponseFormatT] | ResponseFormatParam | NotGiven = NOT_GIVEN, ) -> None: self.__current_completion_snapshot: ParsedChatCompletionSnapshot | None = None @@ -584,7 +584,7 @@ def _build_events( class ChoiceEventState: - def __init__(self, *, input_tools: list[ChatCompletionToolParam]) -> None: + def __init__(self, *, input_tools: list[ChatCompletionToolUnionParam]) -> None: self._input_tools = input_tools self._content_done = False diff --git a/portkey_ai/_vendor/openai/lib/streaming/responses/_events.py b/portkey_ai/_vendor/openai/lib/streaming/responses/_events.py index 6e547815..bdc47b83 100644 --- a/portkey_ai/_vendor/openai/lib/streaming/responses/_events.py +++ b/portkey_ai/_vendor/openai/lib/streaming/responses/_events.py @@ -21,9 +21,7 @@ ResponseRefusalDoneEvent, ResponseRefusalDeltaEvent, ResponseMcpCallFailedEvent, - ResponseReasoningDoneEvent, ResponseOutputItemDoneEvent, - ResponseReasoningDeltaEvent, ResponseContentPartDoneEvent, ResponseOutputItemAddedEvent, ResponseContentPartAddedEvent, @@ -33,19 +31,19 @@ ResponseAudioTranscriptDoneEvent, ResponseAudioTranscriptDeltaEvent, ResponseMcpCallArgumentsDoneEvent, - ResponseReasoningSummaryDoneEvent, ResponseImageGenCallCompletedEvent, ResponseMcpCallArgumentsDeltaEvent, ResponseMcpListToolsCompletedEvent, - ResponseReasoningSummaryDeltaEvent, ResponseImageGenCallGeneratingEvent, ResponseImageGenCallInProgressEvent, ResponseMcpListToolsInProgressEvent, ResponseWebSearchCallCompletedEvent, ResponseWebSearchCallSearchingEvent, + ResponseCustomToolCallInputDoneEvent, ResponseFileSearchCallCompletedEvent, ResponseFileSearchCallSearchingEvent, ResponseWebSearchCallInProgressEvent, + ResponseCustomToolCallInputDeltaEvent, ResponseFileSearchCallInProgressEvent, ResponseImageGenCallPartialImageEvent, ResponseReasoningSummaryPartDoneEvent, @@ -61,6 +59,8 @@ ResponseCodeInterpreterCallInProgressEvent, ResponseCodeInterpreterCallInterpretingEvent, ) +from ....types.responses.response_reasoning_text_done_event import ResponseReasoningTextDoneEvent +from ....types.responses.response_reasoning_text_delta_event import ResponseReasoningTextDeltaEvent TextFormatT = TypeVar( "TextFormatT", @@ -139,10 +139,10 @@ class ResponseCompletedEvent(RawResponseCompletedEvent, GenericModel, Generic[Te ResponseMcpListToolsInProgressEvent, ResponseOutputTextAnnotationAddedEvent, ResponseQueuedEvent, - ResponseReasoningDeltaEvent, - ResponseReasoningSummaryDeltaEvent, - ResponseReasoningSummaryDoneEvent, - ResponseReasoningDoneEvent, + ResponseReasoningTextDeltaEvent, + ResponseReasoningTextDoneEvent, + ResponseCustomToolCallInputDeltaEvent, + ResponseCustomToolCallInputDoneEvent, ], PropertyInfo(discriminator="type"), ] diff --git a/portkey_ai/_vendor/openai/lib/streaming/responses/_responses.py b/portkey_ai/_vendor/openai/lib/streaming/responses/_responses.py index 2c2fec54..d45664de 100644 --- a/portkey_ai/_vendor/openai/lib/streaming/responses/_responses.py +++ b/portkey_ai/_vendor/openai/lib/streaming/responses/_responses.py @@ -264,6 +264,7 @@ def handle_event(self, event: RawResponseStreamEvent) -> List[ResponseStreamEven item_id=event.item_id, output_index=event.output_index, sequence_number=event.sequence_number, + logprobs=event.logprobs, type="response.output_text.delta", snapshot=content.text, ) @@ -282,6 +283,7 @@ def handle_event(self, event: RawResponseStreamEvent) -> List[ResponseStreamEven item_id=event.item_id, output_index=event.output_index, sequence_number=event.sequence_number, + logprobs=event.logprobs, type="response.output_text.done", text=event.text, parsed=parse_text(event.text, text_format=self._text_format), diff --git a/portkey_ai/_vendor/openai/resources/audio/speech.py b/portkey_ai/_vendor/openai/resources/audio/speech.py index a195d713..6251cfed 100644 --- a/portkey_ai/_vendor/openai/resources/audio/speech.py +++ b/portkey_ai/_vendor/openai/resources/audio/speech.py @@ -50,12 +50,11 @@ def create( *, input: str, model: Union[str, SpeechModel], - voice: Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ], + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]], instructions: str | NotGiven = NOT_GIVEN, response_format: Literal["mp3", "opus", "aac", "flac", "wav", "pcm"] | NotGiven = NOT_GIVEN, speed: float | NotGiven = NOT_GIVEN, + stream_format: Literal["sse", "audio"] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -85,7 +84,10 @@ def create( `wav`, and `pcm`. speed: The speed of the generated audio. Select a value from `0.25` to `4.0`. `1.0` is - the default. Does not work with `gpt-4o-mini-tts`. + the default. + + stream_format: The format to stream the audio in. Supported formats are `sse` and `audio`. + `sse` is not supported for `tts-1` or `tts-1-hd`. extra_headers: Send extra headers @@ -106,6 +108,7 @@ def create( "instructions": instructions, "response_format": response_format, "speed": speed, + "stream_format": stream_format, }, speech_create_params.SpeechCreateParams, ), @@ -141,12 +144,11 @@ async def create( *, input: str, model: Union[str, SpeechModel], - voice: Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ], + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]], instructions: str | NotGiven = NOT_GIVEN, response_format: Literal["mp3", "opus", "aac", "flac", "wav", "pcm"] | NotGiven = NOT_GIVEN, speed: float | NotGiven = NOT_GIVEN, + stream_format: Literal["sse", "audio"] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -176,7 +178,10 @@ async def create( `wav`, and `pcm`. speed: The speed of the generated audio. Select a value from `0.25` to `4.0`. `1.0` is - the default. Does not work with `gpt-4o-mini-tts`. + the default. + + stream_format: The format to stream the audio in. Supported formats are `sse` and `audio`. + `sse` is not supported for `tts-1` or `tts-1-hd`. extra_headers: Send extra headers @@ -197,6 +202,7 @@ async def create( "instructions": instructions, "response_format": response_format, "speed": speed, + "stream_format": stream_format, }, speech_create_params.SpeechCreateParams, ), diff --git a/portkey_ai/_vendor/openai/resources/beta/assistants.py b/portkey_ai/_vendor/openai/resources/beta/assistants.py index 9059d936..fe0c99c8 100644 --- a/portkey_ai/_vendor/openai/resources/beta/assistants.py +++ b/portkey_ai/_vendor/openai/resources/beta/assistants.py @@ -96,12 +96,11 @@ def create( name: The name of the assistant. The maximum length is 256 characters. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -220,6 +219,12 @@ def update( model: Union[ str, Literal[ + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5-2025-08-07", + "gpt-5-mini-2025-08-07", + "gpt-5-nano-2025-08-07", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", @@ -298,12 +303,11 @@ def update( name: The name of the assistant. The maximum length is 256 characters. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -545,12 +549,11 @@ async def create( name: The name of the assistant. The maximum length is 256 characters. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -669,6 +672,12 @@ async def update( model: Union[ str, Literal[ + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5-2025-08-07", + "gpt-5-mini-2025-08-07", + "gpt-5-nano-2025-08-07", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", @@ -747,12 +756,11 @@ async def update( name: The name of the assistant. The maximum length is 256 characters. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), diff --git a/portkey_ai/_vendor/openai/resources/beta/beta.py b/portkey_ai/_vendor/openai/resources/beta/beta.py index 62fc8258..4feaaab4 100644 --- a/portkey_ai/_vendor/openai/resources/beta/beta.py +++ b/portkey_ai/_vendor/openai/resources/beta/beta.py @@ -3,7 +3,6 @@ from __future__ import annotations from ..._compat import cached_property -from .chat.chat import Chat, AsyncChat from .assistants import ( Assistants, AsyncAssistants, @@ -21,6 +20,7 @@ ThreadsWithStreamingResponse, AsyncThreadsWithStreamingResponse, ) +from ...resources.chat import Chat, AsyncChat from .realtime.realtime import ( Realtime, AsyncRealtime, diff --git a/portkey_ai/_vendor/openai/resources/beta/chat/__init__.py b/portkey_ai/_vendor/openai/resources/beta/chat/__init__.py deleted file mode 100644 index 072d7867..00000000 --- a/portkey_ai/_vendor/openai/resources/beta/chat/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .chat import Chat, AsyncChat -from .completions import Completions, AsyncCompletions - -__all__ = [ - "Completions", - "AsyncCompletions", - "Chat", - "AsyncChat", -] diff --git a/portkey_ai/_vendor/openai/resources/beta/chat/chat.py b/portkey_ai/_vendor/openai/resources/beta/chat/chat.py deleted file mode 100644 index 6afdcea3..00000000 --- a/portkey_ai/_vendor/openai/resources/beta/chat/chat.py +++ /dev/null @@ -1,21 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from ...._compat import cached_property -from .completions import Completions, AsyncCompletions -from ...._resource import SyncAPIResource, AsyncAPIResource - -__all__ = ["Chat", "AsyncChat"] - - -class Chat(SyncAPIResource): - @cached_property - def completions(self) -> Completions: - return Completions(self._client) - - -class AsyncChat(AsyncAPIResource): - @cached_property - def completions(self) -> AsyncCompletions: - return AsyncCompletions(self._client) diff --git a/portkey_ai/_vendor/openai/resources/beta/chat/completions.py b/portkey_ai/_vendor/openai/resources/beta/chat/completions.py deleted file mode 100644 index 80e01561..00000000 --- a/portkey_ai/_vendor/openai/resources/beta/chat/completions.py +++ /dev/null @@ -1,634 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Dict, List, Type, Union, Iterable, Optional, cast -from functools import partial -from typing_extensions import Literal - -import httpx - -from .... import _legacy_response -from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven -from ...._utils import maybe_transform, async_maybe_transform -from ...._compat import cached_property -from ...._resource import SyncAPIResource, AsyncAPIResource -from ...._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper -from ...._streaming import Stream -from ....types.chat import completion_create_params -from ...._base_client import make_request_options -from ....lib._parsing import ( - ResponseFormatT, - validate_input_tools as _validate_input_tools, - parse_chat_completion as _parse_chat_completion, - type_to_response_format_param as _type_to_response_format, -) -from ....types.chat_model import ChatModel -from ....lib.streaming.chat import ChatCompletionStreamManager, AsyncChatCompletionStreamManager -from ....types.shared_params import Metadata, ReasoningEffort -from ....types.chat.chat_completion import ChatCompletion -from ....types.chat.chat_completion_chunk import ChatCompletionChunk -from ....types.chat.parsed_chat_completion import ParsedChatCompletion -from ....types.chat.chat_completion_tool_param import ChatCompletionToolParam -from ....types.chat.chat_completion_audio_param import ChatCompletionAudioParam -from ....types.chat.chat_completion_message_param import ChatCompletionMessageParam -from ....types.chat.chat_completion_stream_options_param import ChatCompletionStreamOptionsParam -from ....types.chat.chat_completion_prediction_content_param import ChatCompletionPredictionContentParam -from ....types.chat.chat_completion_tool_choice_option_param import ChatCompletionToolChoiceOptionParam - -__all__ = ["Completions", "AsyncCompletions"] - - -class Completions(SyncAPIResource): - @cached_property - def with_raw_response(self) -> CompletionsWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return the - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers - """ - return CompletionsWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> CompletionsWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/openai/openai-python#with_streaming_response - """ - return CompletionsWithStreamingResponse(self) - - def parse( - self, - *, - messages: Iterable[ChatCompletionMessageParam], - model: Union[str, ChatModel], - audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, - response_format: type[ResponseFormatT] | NotGiven = NOT_GIVEN, - frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, - function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, - functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, - logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, - logprobs: Optional[bool] | NotGiven = NOT_GIVEN, - max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, - max_tokens: Optional[int] | NotGiven = NOT_GIVEN, - metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, - modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, - n: Optional[int] | NotGiven = NOT_GIVEN, - parallel_tool_calls: bool | NotGiven = NOT_GIVEN, - prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, - presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, - reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, - seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, - stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, - store: Optional[bool] | NotGiven = NOT_GIVEN, - stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, - temperature: Optional[float] | NotGiven = NOT_GIVEN, - tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, - top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, - top_p: Optional[float] | NotGiven = NOT_GIVEN, - user: str | NotGiven = NOT_GIVEN, - web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ParsedChatCompletion[ResponseFormatT]: - """Wrapper over the `client.chat.completions.create()` method that provides richer integrations with Python specific types - & returns a `ParsedChatCompletion` object, which is a subclass of the standard `ChatCompletion` class. - - You can pass a pydantic model to this method and it will automatically convert the model - into a JSON schema, send it to the API and parse the response content back into the given model. - - This method will also automatically parse `function` tool calls if: - - You use the `openai.pydantic_function_tool()` helper method - - You mark your tool schema with `"strict": True` - - Example usage: - ```py - from pydantic import BaseModel - from openai import OpenAI - - - class Step(BaseModel): - explanation: str - output: str - - - class MathResponse(BaseModel): - steps: List[Step] - final_answer: str - - - client = OpenAI() - completion = client.beta.chat.completions.parse( - model="gpt-4o-2024-08-06", - messages=[ - {"role": "system", "content": "You are a helpful math tutor."}, - {"role": "user", "content": "solve 8x + 31 = 2"}, - ], - response_format=MathResponse, - ) - - message = completion.choices[0].message - if message.parsed: - print(message.parsed.steps) - print("answer: ", message.parsed.final_answer) - ``` - """ - _validate_input_tools(tools) - - extra_headers = { - "X-Stainless-Helper-Method": "beta.chat.completions.parse", - **(extra_headers or {}), - } - - def parser(raw_completion: ChatCompletion) -> ParsedChatCompletion[ResponseFormatT]: - return _parse_chat_completion( - response_format=response_format, - chat_completion=raw_completion, - input_tools=tools, - ) - - return self._post( - "/chat/completions", - body=maybe_transform( - { - "messages": messages, - "model": model, - "audio": audio, - "frequency_penalty": frequency_penalty, - "function_call": function_call, - "functions": functions, - "logit_bias": logit_bias, - "logprobs": logprobs, - "max_completion_tokens": max_completion_tokens, - "max_tokens": max_tokens, - "metadata": metadata, - "modalities": modalities, - "n": n, - "parallel_tool_calls": parallel_tool_calls, - "prediction": prediction, - "presence_penalty": presence_penalty, - "reasoning_effort": reasoning_effort, - "response_format": _type_to_response_format(response_format), - "seed": seed, - "service_tier": service_tier, - "stop": stop, - "store": store, - "stream": False, - "stream_options": stream_options, - "temperature": temperature, - "tool_choice": tool_choice, - "tools": tools, - "top_logprobs": top_logprobs, - "top_p": top_p, - "user": user, - "web_search_options": web_search_options, - }, - completion_create_params.CompletionCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=parser, - ), - # we turn the `ChatCompletion` instance into a `ParsedChatCompletion` - # in the `parser` function above - cast_to=cast(Type[ParsedChatCompletion[ResponseFormatT]], ChatCompletion), - stream=False, - ) - - def stream( - self, - *, - messages: Iterable[ChatCompletionMessageParam], - model: Union[str, ChatModel], - audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, - response_format: completion_create_params.ResponseFormat | type[ResponseFormatT] | NotGiven = NOT_GIVEN, - frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, - function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, - functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, - logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, - logprobs: Optional[bool] | NotGiven = NOT_GIVEN, - max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, - max_tokens: Optional[int] | NotGiven = NOT_GIVEN, - metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, - modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, - n: Optional[int] | NotGiven = NOT_GIVEN, - parallel_tool_calls: bool | NotGiven = NOT_GIVEN, - prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, - presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, - reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, - seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, - stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, - store: Optional[bool] | NotGiven = NOT_GIVEN, - stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, - temperature: Optional[float] | NotGiven = NOT_GIVEN, - tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, - top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, - top_p: Optional[float] | NotGiven = NOT_GIVEN, - user: str | NotGiven = NOT_GIVEN, - web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ChatCompletionStreamManager[ResponseFormatT]: - """Wrapper over the `client.chat.completions.create(stream=True)` method that provides a more granular event API - and automatic accumulation of each delta. - - This also supports all of the parsing utilities that `.parse()` does. - - Unlike `.create(stream=True)`, the `.stream()` method requires usage within a context manager to prevent accidental leakage of the response: - - ```py - with client.beta.chat.completions.stream( - model="gpt-4o-2024-08-06", - messages=[...], - ) as stream: - for event in stream: - if event.type == "content.delta": - print(event.delta, flush=True, end="") - ``` - - When the context manager is entered, a `ChatCompletionStream` instance is returned which, like `.create(stream=True)` is an iterator. The full list of events that are yielded by the iterator are outlined in [these docs](https://github.com/openai/openai-python/blob/main/helpers.md#chat-completions-events). - - When the context manager exits, the response will be closed, however the `stream` instance is still available outside - the context manager. - """ - extra_headers = { - "X-Stainless-Helper-Method": "beta.chat.completions.stream", - **(extra_headers or {}), - } - - api_request: partial[Stream[ChatCompletionChunk]] = partial( - self._client.chat.completions.create, - messages=messages, - model=model, - audio=audio, - stream=True, - response_format=_type_to_response_format(response_format), - frequency_penalty=frequency_penalty, - function_call=function_call, - functions=functions, - logit_bias=logit_bias, - logprobs=logprobs, - max_completion_tokens=max_completion_tokens, - max_tokens=max_tokens, - metadata=metadata, - modalities=modalities, - n=n, - parallel_tool_calls=parallel_tool_calls, - prediction=prediction, - presence_penalty=presence_penalty, - reasoning_effort=reasoning_effort, - seed=seed, - service_tier=service_tier, - store=store, - stop=stop, - stream_options=stream_options, - temperature=temperature, - tool_choice=tool_choice, - tools=tools, - top_logprobs=top_logprobs, - top_p=top_p, - user=user, - web_search_options=web_search_options, - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - ) - return ChatCompletionStreamManager( - api_request, - response_format=response_format, - input_tools=tools, - ) - - -class AsyncCompletions(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncCompletionsWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return the - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers - """ - return AsyncCompletionsWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncCompletionsWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/openai/openai-python#with_streaming_response - """ - return AsyncCompletionsWithStreamingResponse(self) - - async def parse( - self, - *, - messages: Iterable[ChatCompletionMessageParam], - model: Union[str, ChatModel], - audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, - response_format: type[ResponseFormatT] | NotGiven = NOT_GIVEN, - frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, - function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, - functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, - logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, - logprobs: Optional[bool] | NotGiven = NOT_GIVEN, - max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, - max_tokens: Optional[int] | NotGiven = NOT_GIVEN, - metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, - modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, - n: Optional[int] | NotGiven = NOT_GIVEN, - parallel_tool_calls: bool | NotGiven = NOT_GIVEN, - prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, - presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, - reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, - seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, - stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, - store: Optional[bool] | NotGiven = NOT_GIVEN, - stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, - temperature: Optional[float] | NotGiven = NOT_GIVEN, - tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, - top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, - top_p: Optional[float] | NotGiven = NOT_GIVEN, - user: str | NotGiven = NOT_GIVEN, - web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ParsedChatCompletion[ResponseFormatT]: - """Wrapper over the `client.chat.completions.create()` method that provides richer integrations with Python specific types - & returns a `ParsedChatCompletion` object, which is a subclass of the standard `ChatCompletion` class. - - You can pass a pydantic model to this method and it will automatically convert the model - into a JSON schema, send it to the API and parse the response content back into the given model. - - This method will also automatically parse `function` tool calls if: - - You use the `openai.pydantic_function_tool()` helper method - - You mark your tool schema with `"strict": True` - - Example usage: - ```py - from pydantic import BaseModel - from openai import AsyncOpenAI - - - class Step(BaseModel): - explanation: str - output: str - - - class MathResponse(BaseModel): - steps: List[Step] - final_answer: str - - - client = AsyncOpenAI() - completion = await client.beta.chat.completions.parse( - model="gpt-4o-2024-08-06", - messages=[ - {"role": "system", "content": "You are a helpful math tutor."}, - {"role": "user", "content": "solve 8x + 31 = 2"}, - ], - response_format=MathResponse, - ) - - message = completion.choices[0].message - if message.parsed: - print(message.parsed.steps) - print("answer: ", message.parsed.final_answer) - ``` - """ - _validate_input_tools(tools) - - extra_headers = { - "X-Stainless-Helper-Method": "beta.chat.completions.parse", - **(extra_headers or {}), - } - - def parser(raw_completion: ChatCompletion) -> ParsedChatCompletion[ResponseFormatT]: - return _parse_chat_completion( - response_format=response_format, - chat_completion=raw_completion, - input_tools=tools, - ) - - return await self._post( - "/chat/completions", - body=await async_maybe_transform( - { - "messages": messages, - "model": model, - "audio": audio, - "frequency_penalty": frequency_penalty, - "function_call": function_call, - "functions": functions, - "logit_bias": logit_bias, - "logprobs": logprobs, - "max_completion_tokens": max_completion_tokens, - "max_tokens": max_tokens, - "metadata": metadata, - "modalities": modalities, - "n": n, - "parallel_tool_calls": parallel_tool_calls, - "prediction": prediction, - "presence_penalty": presence_penalty, - "reasoning_effort": reasoning_effort, - "response_format": _type_to_response_format(response_format), - "seed": seed, - "service_tier": service_tier, - "store": store, - "stop": stop, - "stream": False, - "stream_options": stream_options, - "temperature": temperature, - "tool_choice": tool_choice, - "tools": tools, - "top_logprobs": top_logprobs, - "top_p": top_p, - "user": user, - "web_search_options": web_search_options, - }, - completion_create_params.CompletionCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=parser, - ), - # we turn the `ChatCompletion` instance into a `ParsedChatCompletion` - # in the `parser` function above - cast_to=cast(Type[ParsedChatCompletion[ResponseFormatT]], ChatCompletion), - stream=False, - ) - - def stream( - self, - *, - messages: Iterable[ChatCompletionMessageParam], - model: Union[str, ChatModel], - audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, - response_format: completion_create_params.ResponseFormat | type[ResponseFormatT] | NotGiven = NOT_GIVEN, - frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, - function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, - functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, - logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, - logprobs: Optional[bool] | NotGiven = NOT_GIVEN, - max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, - max_tokens: Optional[int] | NotGiven = NOT_GIVEN, - metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, - modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, - n: Optional[int] | NotGiven = NOT_GIVEN, - parallel_tool_calls: bool | NotGiven = NOT_GIVEN, - prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, - presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, - reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, - seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, - stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, - store: Optional[bool] | NotGiven = NOT_GIVEN, - stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, - temperature: Optional[float] | NotGiven = NOT_GIVEN, - tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, - top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, - top_p: Optional[float] | NotGiven = NOT_GIVEN, - user: str | NotGiven = NOT_GIVEN, - web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> AsyncChatCompletionStreamManager[ResponseFormatT]: - """Wrapper over the `client.chat.completions.create(stream=True)` method that provides a more granular event API - and automatic accumulation of each delta. - - This also supports all of the parsing utilities that `.parse()` does. - - Unlike `.create(stream=True)`, the `.stream()` method requires usage within a context manager to prevent accidental leakage of the response: - - ```py - async with client.beta.chat.completions.stream( - model="gpt-4o-2024-08-06", - messages=[...], - ) as stream: - async for event in stream: - if event.type == "content.delta": - print(event.delta, flush=True, end="") - ``` - - When the context manager is entered, an `AsyncChatCompletionStream` instance is returned which, like `.create(stream=True)` is an async iterator. The full list of events that are yielded by the iterator are outlined in [these docs](https://github.com/openai/openai-python/blob/main/helpers.md#chat-completions-events). - - When the context manager exits, the response will be closed, however the `stream` instance is still available outside - the context manager. - """ - _validate_input_tools(tools) - - extra_headers = { - "X-Stainless-Helper-Method": "beta.chat.completions.stream", - **(extra_headers or {}), - } - - api_request = self._client.chat.completions.create( - messages=messages, - model=model, - audio=audio, - stream=True, - response_format=_type_to_response_format(response_format), - frequency_penalty=frequency_penalty, - function_call=function_call, - functions=functions, - logit_bias=logit_bias, - logprobs=logprobs, - max_completion_tokens=max_completion_tokens, - max_tokens=max_tokens, - metadata=metadata, - modalities=modalities, - n=n, - parallel_tool_calls=parallel_tool_calls, - prediction=prediction, - presence_penalty=presence_penalty, - reasoning_effort=reasoning_effort, - seed=seed, - service_tier=service_tier, - stop=stop, - store=store, - stream_options=stream_options, - temperature=temperature, - tool_choice=tool_choice, - tools=tools, - top_logprobs=top_logprobs, - top_p=top_p, - user=user, - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - web_search_options=web_search_options, - ) - return AsyncChatCompletionStreamManager( - api_request, - response_format=response_format, - input_tools=tools, - ) - - -class CompletionsWithRawResponse: - def __init__(self, completions: Completions) -> None: - self._completions = completions - - self.parse = _legacy_response.to_raw_response_wrapper( - completions.parse, - ) - - -class AsyncCompletionsWithRawResponse: - def __init__(self, completions: AsyncCompletions) -> None: - self._completions = completions - - self.parse = _legacy_response.async_to_raw_response_wrapper( - completions.parse, - ) - - -class CompletionsWithStreamingResponse: - def __init__(self, completions: Completions) -> None: - self._completions = completions - - self.parse = to_streamed_response_wrapper( - completions.parse, - ) - - -class AsyncCompletionsWithStreamingResponse: - def __init__(self, completions: AsyncCompletions) -> None: - self._completions = completions - - self.parse = async_to_streamed_response_wrapper( - completions.parse, - ) diff --git a/portkey_ai/_vendor/openai/resources/beta/realtime/sessions.py b/portkey_ai/_vendor/openai/resources/beta/realtime/sessions.py index 77f1ec90..e639c0ba 100644 --- a/portkey_ai/_vendor/openai/resources/beta/realtime/sessions.py +++ b/portkey_ai/_vendor/openai/resources/beta/realtime/sessions.py @@ -66,9 +66,7 @@ def create( tools: Iterable[session_create_params.Tool] | NotGiven = NOT_GIVEN, tracing: session_create_params.Tracing | NotGiven = NOT_GIVEN, turn_detection: session_create_params.TurnDetection | NotGiven = NOT_GIVEN, - voice: Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ] + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -163,8 +161,7 @@ def create( voice: The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are - `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, - `shimmer`, and `verse`. + `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`. extra_headers: Send extra headers @@ -251,9 +248,7 @@ async def create( tools: Iterable[session_create_params.Tool] | NotGiven = NOT_GIVEN, tracing: session_create_params.Tracing | NotGiven = NOT_GIVEN, turn_detection: session_create_params.TurnDetection | NotGiven = NOT_GIVEN, - voice: Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ] + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -348,8 +343,7 @@ async def create( voice: The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are - `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, - `shimmer`, and `verse`. + `alloy`, `ash`, `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`. extra_headers: Send extra headers diff --git a/portkey_ai/_vendor/openai/resources/beta/threads/runs/runs.py b/portkey_ai/_vendor/openai/resources/beta/threads/runs/runs.py index 3d9ae975..01246d7c 100644 --- a/portkey_ai/_vendor/openai/resources/beta/threads/runs/runs.py +++ b/portkey_ai/_vendor/openai/resources/beta/threads/runs/runs.py @@ -167,12 +167,11 @@ def create( [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling) during tool use. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -322,12 +321,11 @@ def create( [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling) during tool use. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -473,12 +471,11 @@ def create( [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling) during tool use. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -1600,12 +1597,11 @@ async def create( [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling) during tool use. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -1755,12 +1751,11 @@ async def create( [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling) during tool use. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), @@ -1906,12 +1901,11 @@ async def create( [parallel function calling](https://platform.openai.com/docs/guides/function-calling#configuring-parallel-function-calling) during tool use. - reasoning_effort: **o-series models only** - - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: Specifies the format that the model must output. Compatible with [GPT-4o](https://platform.openai.com/docs/models#gpt-4o), diff --git a/portkey_ai/_vendor/openai/resources/chat/completions/completions.py b/portkey_ai/_vendor/openai/resources/chat/completions/completions.py index a2a664ac..9404d851 100644 --- a/portkey_ai/_vendor/openai/resources/chat/completions/completions.py +++ b/portkey_ai/_vendor/openai/resources/chat/completions/completions.py @@ -3,7 +3,8 @@ from __future__ import annotations import inspect -from typing import Dict, List, Union, Iterable, Optional +from typing import Dict, List, Type, Union, Iterable, Optional, cast +from functools import partial from typing_extensions import Literal, overload import httpx @@ -32,15 +33,23 @@ completion_update_params, ) from ...._base_client import AsyncPaginator, make_request_options +from ....lib._parsing import ( + ResponseFormatT, + validate_input_tools as _validate_input_tools, + parse_chat_completion as _parse_chat_completion, + type_to_response_format_param as _type_to_response_format, +) +from ....lib.streaming.chat import ChatCompletionStreamManager, AsyncChatCompletionStreamManager from ....types.shared.chat_model import ChatModel from ....types.chat.chat_completion import ChatCompletion from ....types.shared_params.metadata import Metadata from ....types.shared.reasoning_effort import ReasoningEffort from ....types.chat.chat_completion_chunk import ChatCompletionChunk +from ....types.chat.parsed_chat_completion import ParsedChatCompletion from ....types.chat.chat_completion_deleted import ChatCompletionDeleted -from ....types.chat.chat_completion_tool_param import ChatCompletionToolParam from ....types.chat.chat_completion_audio_param import ChatCompletionAudioParam from ....types.chat.chat_completion_message_param import ChatCompletionMessageParam +from ....types.chat.chat_completion_tool_union_param import ChatCompletionToolUnionParam from ....types.chat.chat_completion_stream_options_param import ChatCompletionStreamOptionsParam from ....types.chat.chat_completion_prediction_content_param import ChatCompletionPredictionContentParam from ....types.chat.chat_completion_tool_choice_option_param import ChatCompletionToolChoiceOptionParam @@ -72,6 +81,159 @@ def with_streaming_response(self) -> CompletionsWithStreamingResponse: """ return CompletionsWithStreamingResponse(self) + def parse( + self, + *, + messages: Iterable[ChatCompletionMessageParam], + model: Union[str, ChatModel], + audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, + response_format: type[ResponseFormatT] | NotGiven = NOT_GIVEN, + frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, + function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, + functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, + logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, + logprobs: Optional[bool] | NotGiven = NOT_GIVEN, + max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tokens: Optional[int] | NotGiven = NOT_GIVEN, + metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + parallel_tool_calls: bool | NotGiven = NOT_GIVEN, + prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, + presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, + reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + seed: Optional[int] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, + temperature: Optional[float] | NotGiven = NOT_GIVEN, + tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, + top_p: Optional[float] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, + web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ParsedChatCompletion[ResponseFormatT]: + """Wrapper over the `client.chat.completions.create()` method that provides richer integrations with Python specific types + & returns a `ParsedChatCompletion` object, which is a subclass of the standard `ChatCompletion` class. + + You can pass a pydantic model to this method and it will automatically convert the model + into a JSON schema, send it to the API and parse the response content back into the given model. + + This method will also automatically parse `function` tool calls if: + - You use the `openai.pydantic_function_tool()` helper method + - You mark your tool schema with `"strict": True` + + Example usage: + ```py + from pydantic import BaseModel + from openai import OpenAI + + + class Step(BaseModel): + explanation: str + output: str + + + class MathResponse(BaseModel): + steps: List[Step] + final_answer: str + + + client = OpenAI() + completion = client.chat.completions.parse( + model="gpt-4o-2024-08-06", + messages=[ + {"role": "system", "content": "You are a helpful math tutor."}, + {"role": "user", "content": "solve 8x + 31 = 2"}, + ], + response_format=MathResponse, + ) + + message = completion.choices[0].message + if message.parsed: + print(message.parsed.steps) + print("answer: ", message.parsed.final_answer) + ``` + """ + chat_completion_tools = _validate_input_tools(tools) + + extra_headers = { + "X-Stainless-Helper-Method": "chat.completions.parse", + **(extra_headers or {}), + } + + def parser(raw_completion: ChatCompletion) -> ParsedChatCompletion[ResponseFormatT]: + return _parse_chat_completion( + response_format=response_format, + chat_completion=raw_completion, + input_tools=chat_completion_tools, + ) + + return self._post( + "/chat/completions", + body=maybe_transform( + { + "messages": messages, + "model": model, + "audio": audio, + "frequency_penalty": frequency_penalty, + "function_call": function_call, + "functions": functions, + "logit_bias": logit_bias, + "logprobs": logprobs, + "max_completion_tokens": max_completion_tokens, + "max_tokens": max_tokens, + "metadata": metadata, + "modalities": modalities, + "n": n, + "parallel_tool_calls": parallel_tool_calls, + "prediction": prediction, + "presence_penalty": presence_penalty, + "prompt_cache_key": prompt_cache_key, + "reasoning_effort": reasoning_effort, + "response_format": _type_to_response_format(response_format), + "safety_identifier": safety_identifier, + "seed": seed, + "service_tier": service_tier, + "stop": stop, + "store": store, + "stream": False, + "stream_options": stream_options, + "temperature": temperature, + "tool_choice": tool_choice, + "tools": tools, + "top_logprobs": top_logprobs, + "top_p": top_p, + "user": user, + "verbosity": verbosity, + "web_search_options": web_search_options, + }, + completion_create_params.CompletionCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=parser, + ), + # we turn the `ChatCompletion` instance into a `ParsedChatCompletion` + # in the `parser` function above + cast_to=cast(Type[ParsedChatCompletion[ResponseFormatT]], ChatCompletion), + stream=False, + ) + @overload def create( self, @@ -92,20 +254,23 @@ def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -232,12 +397,15 @@ def create( whether they appear in the text so far, increasing the model's likelihood to talk about new topics. - reasoning_effort: **o-series models only** + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: An object specifying the format that the model must output. @@ -250,29 +418,35 @@ def create( ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + seed: This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result. Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend. - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. stop: Not supported with latest reasoning models `o3` and `o4-mini`. @@ -283,6 +457,8 @@ def create( our [model distillation](https://platform.openai.com/docs/guides/distillation) or [evals](https://platform.openai.com/docs/guides/evals) products. + Supports text and image inputs. Note: image inputs over 10MB will be dropped. + stream: If set to true, the model response data will be streamed to the client as it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). @@ -309,9 +485,9 @@ def create( `none` is the default when no tools are present. `auto` is the default if tools are present. - tools: A list of tools the model may call. Currently, only functions are supported as a - tool. Use this to provide a list of functions the model may generate JSON inputs - for. A max of 128 functions are supported. + tools: A list of tools the model may call. You can provide either + [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + or [function tools](https://platform.openai.com/docs/guides/function-calling). top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability. @@ -323,9 +499,15 @@ def create( We generally recommend altering this or `temperature` but not both. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + verbosity: Constrains the verbosity of the model's response. Lower values will result in + more concise responses, while higher values will result in more verbose + responses. Currently supported values are `low`, `medium`, and `high`. web_search_options: This tool searches the web for relevant results to use in a response. Learn more about the @@ -362,19 +544,22 @@ def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -510,12 +695,15 @@ def create( whether they appear in the text so far, increasing the model's likelihood to talk about new topics. - reasoning_effort: **o-series models only** + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: An object specifying the format that the model must output. @@ -528,29 +716,35 @@ def create( ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + seed: This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result. Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend. - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. stop: Not supported with latest reasoning models `o3` and `o4-mini`. @@ -561,6 +755,8 @@ def create( our [model distillation](https://platform.openai.com/docs/guides/distillation) or [evals](https://platform.openai.com/docs/guides/evals) products. + Supports text and image inputs. Note: image inputs over 10MB will be dropped. + stream_options: Options for streaming response. Only set this when you set `stream: true`. temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will @@ -578,9 +774,9 @@ def create( `none` is the default when no tools are present. `auto` is the default if tools are present. - tools: A list of tools the model may call. Currently, only functions are supported as a - tool. Use this to provide a list of functions the model may generate JSON inputs - for. A max of 128 functions are supported. + tools: A list of tools the model may call. You can provide either + [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + or [function tools](https://platform.openai.com/docs/guides/function-calling). top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability. @@ -592,9 +788,15 @@ def create( We generally recommend altering this or `temperature` but not both. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + verbosity: Constrains the verbosity of the model's response. Lower values will result in + more concise responses, while higher values will result in more verbose + responses. Currently supported values are `low`, `medium`, and `high`. web_search_options: This tool searches the web for relevant results to use in a response. Learn more about the @@ -631,19 +833,22 @@ def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -779,12 +984,15 @@ def create( whether they appear in the text so far, increasing the model's likelihood to talk about new topics. - reasoning_effort: **o-series models only** + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: An object specifying the format that the model must output. @@ -797,29 +1005,35 @@ def create( ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + seed: This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result. Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend. - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. stop: Not supported with latest reasoning models `o3` and `o4-mini`. @@ -830,6 +1044,8 @@ def create( our [model distillation](https://platform.openai.com/docs/guides/distillation) or [evals](https://platform.openai.com/docs/guides/evals) products. + Supports text and image inputs. Note: image inputs over 10MB will be dropped. + stream_options: Options for streaming response. Only set this when you set `stream: true`. temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will @@ -847,9 +1063,9 @@ def create( `none` is the default when no tools are present. `auto` is the default if tools are present. - tools: A list of tools the model may call. Currently, only functions are supported as a - tool. Use this to provide a list of functions the model may generate JSON inputs - for. A max of 128 functions are supported. + tools: A list of tools the model may call. You can provide either + [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + or [function tools](https://platform.openai.com/docs/guides/function-calling). top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability. @@ -861,9 +1077,15 @@ def create( We generally recommend altering this or `temperature` but not both. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + verbosity: Constrains the verbosity of the model's response. Lower values will result in + more concise responses, while higher values will result in more verbose + responses. Currently supported values are `low`, `medium`, and `high`. web_search_options: This tool searches the web for relevant results to use in a response. Learn more about the @@ -899,20 +1121,23 @@ def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -942,8 +1167,10 @@ def create( "parallel_tool_calls": parallel_tool_calls, "prediction": prediction, "presence_penalty": presence_penalty, + "prompt_cache_key": prompt_cache_key, "reasoning_effort": reasoning_effort, "response_format": response_format, + "safety_identifier": safety_identifier, "seed": seed, "service_tier": service_tier, "stop": stop, @@ -956,6 +1183,7 @@ def create( "top_logprobs": top_logprobs, "top_p": top_p, "user": user, + "verbosity": verbosity, "web_search_options": web_search_options, }, completion_create_params.CompletionCreateParamsStreaming @@ -1150,6 +1378,123 @@ def delete( cast_to=ChatCompletionDeleted, ) + def stream( + self, + *, + messages: Iterable[ChatCompletionMessageParam], + model: Union[str, ChatModel], + audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, + response_format: completion_create_params.ResponseFormat | type[ResponseFormatT] | NotGiven = NOT_GIVEN, + frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, + function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, + functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, + logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, + logprobs: Optional[bool] | NotGiven = NOT_GIVEN, + max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tokens: Optional[int] | NotGiven = NOT_GIVEN, + metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + parallel_tool_calls: bool | NotGiven = NOT_GIVEN, + prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, + presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, + reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + seed: Optional[int] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, + temperature: Optional[float] | NotGiven = NOT_GIVEN, + tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, + top_p: Optional[float] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, + web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ChatCompletionStreamManager[ResponseFormatT]: + """Wrapper over the `client.chat.completions.create(stream=True)` method that provides a more granular event API + and automatic accumulation of each delta. + + This also supports all of the parsing utilities that `.parse()` does. + + Unlike `.create(stream=True)`, the `.stream()` method requires usage within a context manager to prevent accidental leakage of the response: + + ```py + with client.chat.completions.stream( + model="gpt-4o-2024-08-06", + messages=[...], + ) as stream: + for event in stream: + if event.type == "content.delta": + print(event.delta, flush=True, end="") + ``` + + When the context manager is entered, a `ChatCompletionStream` instance is returned which, like `.create(stream=True)` is an iterator. The full list of events that are yielded by the iterator are outlined in [these docs](https://github.com/openai/openai-python/blob/main/helpers.md#chat-completions-events). + + When the context manager exits, the response will be closed, however the `stream` instance is still available outside + the context manager. + """ + extra_headers = { + "X-Stainless-Helper-Method": "chat.completions.stream", + **(extra_headers or {}), + } + + api_request: partial[Stream[ChatCompletionChunk]] = partial( + self.create, + messages=messages, + model=model, + audio=audio, + stream=True, + response_format=_type_to_response_format(response_format), + frequency_penalty=frequency_penalty, + function_call=function_call, + functions=functions, + logit_bias=logit_bias, + logprobs=logprobs, + max_completion_tokens=max_completion_tokens, + max_tokens=max_tokens, + metadata=metadata, + modalities=modalities, + n=n, + parallel_tool_calls=parallel_tool_calls, + prediction=prediction, + presence_penalty=presence_penalty, + prompt_cache_key=prompt_cache_key, + reasoning_effort=reasoning_effort, + safety_identifier=safety_identifier, + seed=seed, + service_tier=service_tier, + store=store, + stop=stop, + stream_options=stream_options, + temperature=temperature, + tool_choice=tool_choice, + tools=tools, + top_logprobs=top_logprobs, + top_p=top_p, + user=user, + verbosity=verbosity, + web_search_options=web_search_options, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + return ChatCompletionStreamManager( + api_request, + response_format=response_format, + input_tools=tools, + ) + class AsyncCompletions(AsyncAPIResource): @cached_property @@ -1175,6 +1520,159 @@ def with_streaming_response(self) -> AsyncCompletionsWithStreamingResponse: """ return AsyncCompletionsWithStreamingResponse(self) + async def parse( + self, + *, + messages: Iterable[ChatCompletionMessageParam], + model: Union[str, ChatModel], + audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, + response_format: type[ResponseFormatT] | NotGiven = NOT_GIVEN, + frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, + function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, + functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, + logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, + logprobs: Optional[bool] | NotGiven = NOT_GIVEN, + max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tokens: Optional[int] | NotGiven = NOT_GIVEN, + metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + parallel_tool_calls: bool | NotGiven = NOT_GIVEN, + prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, + presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, + reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + seed: Optional[int] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, + temperature: Optional[float] | NotGiven = NOT_GIVEN, + tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, + top_p: Optional[float] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, + web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ParsedChatCompletion[ResponseFormatT]: + """Wrapper over the `client.chat.completions.create()` method that provides richer integrations with Python specific types + & returns a `ParsedChatCompletion` object, which is a subclass of the standard `ChatCompletion` class. + + You can pass a pydantic model to this method and it will automatically convert the model + into a JSON schema, send it to the API and parse the response content back into the given model. + + This method will also automatically parse `function` tool calls if: + - You use the `openai.pydantic_function_tool()` helper method + - You mark your tool schema with `"strict": True` + + Example usage: + ```py + from pydantic import BaseModel + from openai import AsyncOpenAI + + + class Step(BaseModel): + explanation: str + output: str + + + class MathResponse(BaseModel): + steps: List[Step] + final_answer: str + + + client = AsyncOpenAI() + completion = await client.chat.completions.parse( + model="gpt-4o-2024-08-06", + messages=[ + {"role": "system", "content": "You are a helpful math tutor."}, + {"role": "user", "content": "solve 8x + 31 = 2"}, + ], + response_format=MathResponse, + ) + + message = completion.choices[0].message + if message.parsed: + print(message.parsed.steps) + print("answer: ", message.parsed.final_answer) + ``` + """ + _validate_input_tools(tools) + + extra_headers = { + "X-Stainless-Helper-Method": "chat.completions.parse", + **(extra_headers or {}), + } + + def parser(raw_completion: ChatCompletion) -> ParsedChatCompletion[ResponseFormatT]: + return _parse_chat_completion( + response_format=response_format, + chat_completion=raw_completion, + input_tools=tools, + ) + + return await self._post( + "/chat/completions", + body=await async_maybe_transform( + { + "messages": messages, + "model": model, + "audio": audio, + "frequency_penalty": frequency_penalty, + "function_call": function_call, + "functions": functions, + "logit_bias": logit_bias, + "logprobs": logprobs, + "max_completion_tokens": max_completion_tokens, + "max_tokens": max_tokens, + "metadata": metadata, + "modalities": modalities, + "n": n, + "parallel_tool_calls": parallel_tool_calls, + "prediction": prediction, + "presence_penalty": presence_penalty, + "prompt_cache_key": prompt_cache_key, + "reasoning_effort": reasoning_effort, + "response_format": _type_to_response_format(response_format), + "safety_identifier": safety_identifier, + "seed": seed, + "service_tier": service_tier, + "store": store, + "stop": stop, + "stream": False, + "stream_options": stream_options, + "temperature": temperature, + "tool_choice": tool_choice, + "tools": tools, + "top_logprobs": top_logprobs, + "top_p": top_p, + "user": user, + "verbosity": verbosity, + "web_search_options": web_search_options, + }, + completion_create_params.CompletionCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=parser, + ), + # we turn the `ChatCompletion` instance into a `ParsedChatCompletion` + # in the `parser` function above + cast_to=cast(Type[ParsedChatCompletion[ResponseFormatT]], ChatCompletion), + stream=False, + ) + @overload async def create( self, @@ -1195,20 +1693,23 @@ async def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1335,12 +1836,15 @@ async def create( whether they appear in the text so far, increasing the model's likelihood to talk about new topics. - reasoning_effort: **o-series models only** + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: An object specifying the format that the model must output. @@ -1353,29 +1857,35 @@ async def create( ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + seed: This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result. Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend. - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. stop: Not supported with latest reasoning models `o3` and `o4-mini`. @@ -1386,6 +1896,8 @@ async def create( our [model distillation](https://platform.openai.com/docs/guides/distillation) or [evals](https://platform.openai.com/docs/guides/evals) products. + Supports text and image inputs. Note: image inputs over 10MB will be dropped. + stream: If set to true, the model response data will be streamed to the client as it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). @@ -1412,9 +1924,9 @@ async def create( `none` is the default when no tools are present. `auto` is the default if tools are present. - tools: A list of tools the model may call. Currently, only functions are supported as a - tool. Use this to provide a list of functions the model may generate JSON inputs - for. A max of 128 functions are supported. + tools: A list of tools the model may call. You can provide either + [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + or [function tools](https://platform.openai.com/docs/guides/function-calling). top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability. @@ -1426,9 +1938,15 @@ async def create( We generally recommend altering this or `temperature` but not both. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + verbosity: Constrains the verbosity of the model's response. Lower values will result in + more concise responses, while higher values will result in more verbose + responses. Currently supported values are `low`, `medium`, and `high`. web_search_options: This tool searches the web for relevant results to use in a response. Learn more about the @@ -1465,19 +1983,22 @@ async def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1613,12 +2134,15 @@ async def create( whether they appear in the text so far, increasing the model's likelihood to talk about new topics. - reasoning_effort: **o-series models only** + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: An object specifying the format that the model must output. @@ -1631,29 +2155,35 @@ async def create( ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + seed: This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result. Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend. - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. stop: Not supported with latest reasoning models `o3` and `o4-mini`. @@ -1664,6 +2194,8 @@ async def create( our [model distillation](https://platform.openai.com/docs/guides/distillation) or [evals](https://platform.openai.com/docs/guides/evals) products. + Supports text and image inputs. Note: image inputs over 10MB will be dropped. + stream_options: Options for streaming response. Only set this when you set `stream: true`. temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will @@ -1681,9 +2213,9 @@ async def create( `none` is the default when no tools are present. `auto` is the default if tools are present. - tools: A list of tools the model may call. Currently, only functions are supported as a - tool. Use this to provide a list of functions the model may generate JSON inputs - for. A max of 128 functions are supported. + tools: A list of tools the model may call. You can provide either + [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + or [function tools](https://platform.openai.com/docs/guides/function-calling). top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability. @@ -1695,9 +2227,15 @@ async def create( We generally recommend altering this or `temperature` but not both. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + verbosity: Constrains the verbosity of the model's response. Lower values will result in + more concise responses, while higher values will result in more verbose + responses. Currently supported values are `low`, `medium`, and `high`. web_search_options: This tool searches the web for relevant results to use in a response. Learn more about the @@ -1734,19 +2272,22 @@ async def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1882,12 +2423,15 @@ async def create( whether they appear in the text so far, increasing the model's likelihood to talk about new topics. - reasoning_effort: **o-series models only** + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). - Constrains effort on reasoning for + reasoning_effort: Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. response_format: An object specifying the format that the model must output. @@ -1900,29 +2444,35 @@ async def create( ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + seed: This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result. Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend. - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. stop: Not supported with latest reasoning models `o3` and `o4-mini`. @@ -1933,6 +2483,8 @@ async def create( our [model distillation](https://platform.openai.com/docs/guides/distillation) or [evals](https://platform.openai.com/docs/guides/evals) products. + Supports text and image inputs. Note: image inputs over 10MB will be dropped. + stream_options: Options for streaming response. Only set this when you set `stream: true`. temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will @@ -1950,9 +2502,9 @@ async def create( `none` is the default when no tools are present. `auto` is the default if tools are present. - tools: A list of tools the model may call. Currently, only functions are supported as a - tool. Use this to provide a list of functions the model may generate JSON inputs - for. A max of 128 functions are supported. + tools: A list of tools the model may call. You can provide either + [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + or [function tools](https://platform.openai.com/docs/guides/function-calling). top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability. @@ -1964,9 +2516,15 @@ async def create( We generally recommend altering this or `temperature` but not both. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + verbosity: Constrains the verbosity of the model's response. Lower values will result in + more concise responses, while higher values will result in more verbose + responses. Currently supported values are `low`, `medium`, and `high`. web_search_options: This tool searches the web for relevant results to use in a response. Learn more about the @@ -2002,20 +2560,23 @@ async def create( parallel_tool_calls: bool | NotGiven = NOT_GIVEN, prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, response_format: completion_create_params.ResponseFormat | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, seed: Optional[int] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, - tools: Iterable[ChatCompletionToolParam] | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -2045,8 +2606,10 @@ async def create( "parallel_tool_calls": parallel_tool_calls, "prediction": prediction, "presence_penalty": presence_penalty, + "prompt_cache_key": prompt_cache_key, "reasoning_effort": reasoning_effort, "response_format": response_format, + "safety_identifier": safety_identifier, "seed": seed, "service_tier": service_tier, "stop": stop, @@ -2059,6 +2622,7 @@ async def create( "top_logprobs": top_logprobs, "top_p": top_p, "user": user, + "verbosity": verbosity, "web_search_options": web_search_options, }, completion_create_params.CompletionCreateParamsStreaming @@ -2253,11 +2817,132 @@ async def delete( cast_to=ChatCompletionDeleted, ) + def stream( + self, + *, + messages: Iterable[ChatCompletionMessageParam], + model: Union[str, ChatModel], + audio: Optional[ChatCompletionAudioParam] | NotGiven = NOT_GIVEN, + response_format: completion_create_params.ResponseFormat | type[ResponseFormatT] | NotGiven = NOT_GIVEN, + frequency_penalty: Optional[float] | NotGiven = NOT_GIVEN, + function_call: completion_create_params.FunctionCall | NotGiven = NOT_GIVEN, + functions: Iterable[completion_create_params.Function] | NotGiven = NOT_GIVEN, + logit_bias: Optional[Dict[str, int]] | NotGiven = NOT_GIVEN, + logprobs: Optional[bool] | NotGiven = NOT_GIVEN, + max_completion_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tokens: Optional[int] | NotGiven = NOT_GIVEN, + metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + modalities: Optional[List[Literal["text", "audio"]]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + parallel_tool_calls: bool | NotGiven = NOT_GIVEN, + prediction: Optional[ChatCompletionPredictionContentParam] | NotGiven = NOT_GIVEN, + presence_penalty: Optional[float] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, + reasoning_effort: Optional[ReasoningEffort] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + seed: Optional[int] | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[ChatCompletionStreamOptionsParam] | NotGiven = NOT_GIVEN, + temperature: Optional[float] | NotGiven = NOT_GIVEN, + tool_choice: ChatCompletionToolChoiceOptionParam | NotGiven = NOT_GIVEN, + tools: Iterable[ChatCompletionToolUnionParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, + top_p: Optional[float] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, + web_search_options: completion_create_params.WebSearchOptions | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> AsyncChatCompletionStreamManager[ResponseFormatT]: + """Wrapper over the `client.chat.completions.create(stream=True)` method that provides a more granular event API + and automatic accumulation of each delta. + + This also supports all of the parsing utilities that `.parse()` does. + + Unlike `.create(stream=True)`, the `.stream()` method requires usage within a context manager to prevent accidental leakage of the response: + + ```py + async with client.chat.completions.stream( + model="gpt-4o-2024-08-06", + messages=[...], + ) as stream: + async for event in stream: + if event.type == "content.delta": + print(event.delta, flush=True, end="") + ``` + + When the context manager is entered, an `AsyncChatCompletionStream` instance is returned which, like `.create(stream=True)` is an async iterator. The full list of events that are yielded by the iterator are outlined in [these docs](https://github.com/openai/openai-python/blob/main/helpers.md#chat-completions-events). + + When the context manager exits, the response will be closed, however the `stream` instance is still available outside + the context manager. + """ + _validate_input_tools(tools) + + extra_headers = { + "X-Stainless-Helper-Method": "chat.completions.stream", + **(extra_headers or {}), + } + + api_request = self.create( + messages=messages, + model=model, + audio=audio, + stream=True, + response_format=_type_to_response_format(response_format), + frequency_penalty=frequency_penalty, + function_call=function_call, + functions=functions, + logit_bias=logit_bias, + logprobs=logprobs, + max_completion_tokens=max_completion_tokens, + max_tokens=max_tokens, + metadata=metadata, + modalities=modalities, + n=n, + parallel_tool_calls=parallel_tool_calls, + prediction=prediction, + presence_penalty=presence_penalty, + prompt_cache_key=prompt_cache_key, + reasoning_effort=reasoning_effort, + safety_identifier=safety_identifier, + seed=seed, + service_tier=service_tier, + stop=stop, + store=store, + stream_options=stream_options, + temperature=temperature, + tool_choice=tool_choice, + tools=tools, + top_logprobs=top_logprobs, + top_p=top_p, + user=user, + verbosity=verbosity, + web_search_options=web_search_options, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + ) + return AsyncChatCompletionStreamManager( + api_request, + response_format=response_format, + input_tools=tools, + ) + class CompletionsWithRawResponse: def __init__(self, completions: Completions) -> None: self._completions = completions + self.parse = _legacy_response.to_raw_response_wrapper( + completions.parse, + ) self.create = _legacy_response.to_raw_response_wrapper( completions.create, ) @@ -2283,6 +2968,9 @@ class AsyncCompletionsWithRawResponse: def __init__(self, completions: AsyncCompletions) -> None: self._completions = completions + self.parse = _legacy_response.async_to_raw_response_wrapper( + completions.parse, + ) self.create = _legacy_response.async_to_raw_response_wrapper( completions.create, ) @@ -2308,6 +2996,9 @@ class CompletionsWithStreamingResponse: def __init__(self, completions: Completions) -> None: self._completions = completions + self.parse = to_streamed_response_wrapper( + completions.parse, + ) self.create = to_streamed_response_wrapper( completions.create, ) @@ -2333,6 +3024,9 @@ class AsyncCompletionsWithStreamingResponse: def __init__(self, completions: AsyncCompletions) -> None: self._completions = completions + self.parse = async_to_streamed_response_wrapper( + completions.parse, + ) self.create = async_to_streamed_response_wrapper( completions.create, ) @@ -2357,5 +3051,5 @@ def messages(self) -> AsyncMessagesWithStreamingResponse: def validate_response_format(response_format: object) -> None: if inspect.isclass(response_format) and issubclass(response_format, pydantic.BaseModel): raise TypeError( - "You tried to pass a `BaseModel` class to `chat.completions.create()`; You must use `beta.chat.completions.parse()` instead" + "You tried to pass a `BaseModel` class to `chat.completions.create()`; You must use `chat.completions.parse()` instead" ) diff --git a/portkey_ai/_vendor/openai/resources/embeddings.py b/portkey_ai/_vendor/openai/resources/embeddings.py index 553dacc2..609f33f3 100644 --- a/portkey_ai/_vendor/openai/resources/embeddings.py +++ b/portkey_ai/_vendor/openai/resources/embeddings.py @@ -112,6 +112,9 @@ def parser(obj: CreateEmbeddingResponse) -> CreateEmbeddingResponse: # don't modify the response object if a user explicitly asked for a format return obj + if not obj.data: + raise ValueError("No embedding data received") + for embedding in obj.data: data = cast(object, embedding.embedding) if not isinstance(data, str): @@ -228,6 +231,9 @@ def parser(obj: CreateEmbeddingResponse) -> CreateEmbeddingResponse: # don't modify the response object if a user explicitly asked for a format return obj + if not obj.data: + raise ValueError("No embedding data received") + for embedding in obj.data: data = cast(object, embedding.embedding) if not isinstance(data, str): diff --git a/portkey_ai/_vendor/openai/resources/fine_tuning/jobs/jobs.py b/portkey_ai/_vendor/openai/resources/fine_tuning/jobs/jobs.py index 5cca2191..ee21cdd2 100644 --- a/portkey_ai/_vendor/openai/resources/fine_tuning/jobs/jobs.py +++ b/portkey_ai/_vendor/openai/resources/fine_tuning/jobs/jobs.py @@ -84,7 +84,7 @@ def create( Response includes details of the enqueued job including job status and the name of the fine-tuned models once complete. - [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning) + [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization) Args: model: The name of the model to fine-tune. You can select one of the @@ -105,7 +105,8 @@ def create( [preference](https://platform.openai.com/docs/api-reference/fine-tuning/preference-input) format. - See the [fine-tuning guide](https://platform.openai.com/docs/guides/fine-tuning) + See the + [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization) for more details. hyperparameters: The hyperparameters used for the fine-tuning job. This value is now deprecated @@ -142,7 +143,8 @@ def create( Your dataset must be formatted as a JSONL file. You must upload your file with the purpose `fine-tune`. - See the [fine-tuning guide](https://platform.openai.com/docs/guides/fine-tuning) + See the + [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization) for more details. extra_headers: Send extra headers @@ -189,7 +191,7 @@ def retrieve( """ Get info about a fine-tuning job. - [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning) + [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization) Args: extra_headers: Send extra headers @@ -462,7 +464,7 @@ async def create( Response includes details of the enqueued job including job status and the name of the fine-tuned models once complete. - [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning) + [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization) Args: model: The name of the model to fine-tune. You can select one of the @@ -483,7 +485,8 @@ async def create( [preference](https://platform.openai.com/docs/api-reference/fine-tuning/preference-input) format. - See the [fine-tuning guide](https://platform.openai.com/docs/guides/fine-tuning) + See the + [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization) for more details. hyperparameters: The hyperparameters used for the fine-tuning job. This value is now deprecated @@ -520,7 +523,8 @@ async def create( Your dataset must be formatted as a JSONL file. You must upload your file with the purpose `fine-tune`. - See the [fine-tuning guide](https://platform.openai.com/docs/guides/fine-tuning) + See the + [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization) for more details. extra_headers: Send extra headers @@ -567,7 +571,7 @@ async def retrieve( """ Get info about a fine-tuning job. - [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning) + [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization) Args: extra_headers: Send extra headers diff --git a/portkey_ai/_vendor/openai/resources/images.py b/portkey_ai/_vendor/openai/resources/images.py index 0f1c9fcb..c8eda8a7 100644 --- a/portkey_ai/_vendor/openai/resources/images.py +++ b/portkey_ai/_vendor/openai/resources/images.py @@ -3,20 +3,23 @@ from __future__ import annotations from typing import List, Union, Mapping, Optional, cast -from typing_extensions import Literal +from typing_extensions import Literal, overload import httpx from .. import _legacy_response from ..types import image_edit_params, image_generate_params, image_create_variation_params from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes -from .._utils import extract_files, maybe_transform, deepcopy_minimal, async_maybe_transform +from .._utils import extract_files, required_args, maybe_transform, deepcopy_minimal, async_maybe_transform from .._compat import cached_property from .._resource import SyncAPIResource, AsyncAPIResource from .._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper +from .._streaming import Stream, AsyncStream from .._base_client import make_request_options from ..types.image_model import ImageModel from ..types.images_response import ImagesResponse +from ..types.image_gen_stream_event import ImageGenStreamEvent +from ..types.image_edit_stream_event import ImageEditStreamEvent __all__ = ["Images", "AsyncImages"] @@ -114,19 +117,25 @@ def create_variation( cast_to=ImagesResponse, ) + @overload def edit( self, *, image: Union[FileTypes, List[FileTypes]], prompt: str, background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, mask: FileTypes | NotGiven = NOT_GIVEN, model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -160,6 +169,10 @@ def edit( If `transparent`, the output format needs to support transparency, so it should be set to either `png` (default value) or `webp`. + input_fidelity: Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + mask: An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where `image` should be edited. If there are multiple images provided, the mask will be applied on the first image. Must be a valid PNG file, less than @@ -171,6 +184,21 @@ def edit( n: The number of images to generate. Must be between 1 and 10. + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. The + default value is `png`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + quality: The quality of the image that will be generated. `high`, `medium` and `low` are only supported for `gpt-image-1`. `dall-e-2` only supports `standard` quality. Defaults to `auto`. @@ -184,6 +212,10 @@ def edit( (landscape), `1024x1536` (portrait), or `auto` (default value) for `gpt-image-1`, and one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`. + stream: Edit the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. + user: A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). @@ -196,52 +228,27 @@ def edit( timeout: Override the client-level default timeout for this request, in seconds """ - body = deepcopy_minimal( - { - "image": image, - "prompt": prompt, - "background": background, - "mask": mask, - "model": model, - "n": n, - "quality": quality, - "response_format": response_format, - "size": size, - "user": user, - } - ) - files = extract_files(cast(Mapping[str, object], body), paths=[["image"], ["image", ""], ["mask"]]) - # It should be noted that the actual Content-Type header that will be - # sent to the server will contain a `boundary` parameter, e.g. - # multipart/form-data; boundary=---abc-- - extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} - return self._post( - "/images/edits", - body=maybe_transform(body, image_edit_params.ImageEditParams), - files=files, - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ImagesResponse, - ) + ... - def generate( + @overload + def edit( self, *, + image: Union[FileTypes, List[FileTypes]], prompt: str, + stream: Literal[True], background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, + mask: FileTypes | NotGiven = NOT_GIVEN, model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, - moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, n: Optional[int] | NotGiven = NOT_GIVEN, output_compression: Optional[int] | NotGiven = NOT_GIVEN, output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, - quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, - size: Optional[ - Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] - ] + size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] | NotGiven = NOT_GIVEN, - style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -249,15 +256,27 @@ def generate( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ImagesResponse: - """ - Creates an image given a prompt. - [Learn more](https://platform.openai.com/docs/guides/images). + ) -> Stream[ImageEditStreamEvent]: + """Creates an edited or extended image given one or more source images and a + prompt. + + This endpoint only supports `gpt-image-1` and `dall-e-2`. Args: - prompt: A text description of the desired image(s). The maximum length is 32000 - characters for `gpt-image-1`, 1000 characters for `dall-e-2` and 4000 characters - for `dall-e-3`. + image: The image(s) to edit. Must be a supported image file or an array of images. + + For `gpt-image-1`, each image should be a `png`, `webp`, or `jpg` file less than + 50MB. You can provide up to 16 images. + + For `dall-e-2`, you can only provide one image, and it should be a square `png` + file less than 4MB. + + prompt: A text description of the desired image(s). The maximum length is 1000 + characters for `dall-e-2`, and 32000 characters for `gpt-image-1`. + + stream: Edit the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. background: Allows to set transparency for the background of the generated image(s). This parameter is only supported for `gpt-image-1`. Must be one of `transparent`, @@ -267,139 +286,48 @@ def generate( If `transparent`, the output format needs to support transparency, so it should be set to either `png` (default value) or `webp`. - model: The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or - `gpt-image-1`. Defaults to `dall-e-2` unless a parameter specific to - `gpt-image-1` is used. + input_fidelity: Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. - moderation: Control the content-moderation level for images generated by `gpt-image-1`. Must - be either `low` for less restrictive filtering or `auto` (default value). + mask: An additional image whose fully transparent areas (e.g. where alpha is zero) + indicate where `image` should be edited. If there are multiple images provided, + the mask will be applied on the first image. Must be a valid PNG file, less than + 4MB, and have the same dimensions as `image`. - n: The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only - `n=1` is supported. + model: The model to use for image generation. Only `dall-e-2` and `gpt-image-1` are + supported. Defaults to `dall-e-2` unless a parameter specific to `gpt-image-1` + is used. + + n: The number of images to generate. Must be between 1 and 10. output_compression: The compression level (0-100%) for the generated images. This parameter is only supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and defaults to 100. output_format: The format in which the generated images are returned. This parameter is only - supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. - - quality: The quality of the image that will be generated. - - - `auto` (default value) will automatically select the best quality for the - given model. - - `high`, `medium` and `low` are supported for `gpt-image-1`. - - `hd` and `standard` are supported for `dall-e-3`. - - `standard` is the only option for `dall-e-2`. - - response_format: The format in which generated images with `dall-e-2` and `dall-e-3` are - returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes - after the image has been generated. This parameter isn't supported for - `gpt-image-1` which will always return base64-encoded images. - - size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` - (landscape), `1024x1536` (portrait), or `auto` (default value) for - `gpt-image-1`, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and - one of `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`. - - style: The style of the generated images. This parameter is only supported for - `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean - towards generating hyper-real and dramatic images. Natural causes the model to - produce more natural, less hyper-real looking images. - - user: A unique identifier representing your end-user, which can help OpenAI to monitor - and detect abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/images/generations", - body=maybe_transform( - { - "prompt": prompt, - "background": background, - "model": model, - "moderation": moderation, - "n": n, - "output_compression": output_compression, - "output_format": output_format, - "quality": quality, - "response_format": response_format, - "size": size, - "style": style, - "user": user, - }, - image_generate_params.ImageGenerateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ImagesResponse, - ) - - -class AsyncImages(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncImagesWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers - """ - return AsyncImagesWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncImagesWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/openai/openai-python#with_streaming_response - """ - return AsyncImagesWithStreamingResponse(self) - - async def create_variation( - self, - *, - image: FileTypes, - model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, - n: Optional[int] | NotGiven = NOT_GIVEN, - response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, - size: Optional[Literal["256x256", "512x512", "1024x1024"]] | NotGiven = NOT_GIVEN, - user: str | NotGiven = NOT_GIVEN, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ImagesResponse: - """Creates a variation of a given image. + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. The + default value is `png`. - This endpoint only supports `dall-e-2`. - - Args: - image: The image to use as the basis for the variation(s). Must be a valid PNG file, - less than 4MB, and square. + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. - model: The model to use for image generation. Only `dall-e-2` is supported at this - time. + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. - n: The number of images to generate. Must be between 1 and 10. + quality: The quality of the image that will be generated. `high`, `medium` and `low` are + only supported for `gpt-image-1`. `dall-e-2` only supports `standard` quality. + Defaults to `auto`. response_format: The format in which the generated images are returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes after the image has been - generated. + generated. This parameter is only supported for `dall-e-2`, as `gpt-image-1` + will always return base64-encoded images. - size: The size of the generated images. Must be one of `256x256`, `512x512`, or - `1024x1024`. + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, and one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`. user: A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. @@ -413,40 +341,23 @@ async def create_variation( timeout: Override the client-level default timeout for this request, in seconds """ - body = deepcopy_minimal( - { - "image": image, - "model": model, - "n": n, - "response_format": response_format, - "size": size, - "user": user, - } - ) - files = extract_files(cast(Mapping[str, object], body), paths=[["image"]]) - # It should be noted that the actual Content-Type header that will be - # sent to the server will contain a `boundary` parameter, e.g. - # multipart/form-data; boundary=---abc-- - extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} - return await self._post( - "/images/variations", - body=await async_maybe_transform(body, image_create_variation_params.ImageCreateVariationParams), - files=files, - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=ImagesResponse, - ) + ... - async def edit( + @overload + def edit( self, *, image: Union[FileTypes, List[FileTypes]], prompt: str, + stream: bool, background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, mask: FileTypes | NotGiven = NOT_GIVEN, model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] @@ -458,7 +369,7 @@ async def edit( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, - ) -> ImagesResponse: + ) -> ImagesResponse | Stream[ImageEditStreamEvent]: """Creates an edited or extended image given one or more source images and a prompt. @@ -476,6 +387,10 @@ async def edit( prompt: A text description of the desired image(s). The maximum length is 1000 characters for `dall-e-2`, and 32000 characters for `gpt-image-1`. + stream: Edit the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. + background: Allows to set transparency for the background of the generated image(s). This parameter is only supported for `gpt-image-1`. Must be one of `transparent`, `opaque` or `auto` (default value). When `auto` is used, the model will @@ -484,6 +399,10 @@ async def edit( If `transparent`, the output format needs to support transparency, so it should be set to either `png` (default value) or `webp`. + input_fidelity: Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + mask: An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where `image` should be edited. If there are multiple images provided, the mask will be applied on the first image. Must be a valid PNG file, less than @@ -495,6 +414,21 @@ async def edit( n: The number of images to generate. Must be between 1 and 10. + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. The + default value is `png`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + quality: The quality of the image that will be generated. `high`, `medium` and `low` are only supported for `gpt-image-1`. `dall-e-2` only supports `standard` quality. Defaults to `auto`. @@ -520,17 +454,939 @@ async def edit( timeout: Override the client-level default timeout for this request, in seconds """ - body = deepcopy_minimal( - { - "image": image, - "prompt": prompt, - "background": background, - "mask": mask, - "model": model, - "n": n, - "quality": quality, - "response_format": response_format, + ... + + @required_args(["image", "prompt"], ["image", "prompt", "stream"]) + def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, + mask: FileTypes | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] + | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse | Stream[ImageEditStreamEvent]: + body = deepcopy_minimal( + { + "image": image, + "prompt": prompt, + "background": background, + "input_fidelity": input_fidelity, + "mask": mask, + "model": model, + "n": n, + "output_compression": output_compression, + "output_format": output_format, + "partial_images": partial_images, + "quality": quality, + "response_format": response_format, + "size": size, + "stream": stream, + "user": user, + } + ) + files = extract_files(cast(Mapping[str, object], body), paths=[["image"], ["image", ""], ["mask"]]) + # It should be noted that the actual Content-Type header that will be + # sent to the server will contain a `boundary` parameter, e.g. + # multipart/form-data; boundary=---abc-- + extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} + return self._post( + "/images/edits", + body=maybe_transform( + body, + image_edit_params.ImageEditParamsStreaming if stream else image_edit_params.ImageEditParamsNonStreaming, + ), + files=files, + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ImagesResponse, + stream=stream or False, + stream_cls=Stream[ImageEditStreamEvent], + ) + + @overload + def generate( + self, + *, + prompt: str, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[ + Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] + ] + | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, + style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse: + """ + Creates an image given a prompt. + [Learn more](https://platform.openai.com/docs/guides/images). + + Args: + prompt: A text description of the desired image(s). The maximum length is 32000 + characters for `gpt-image-1`, 1000 characters for `dall-e-2` and 4000 characters + for `dall-e-3`. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + model: The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or + `gpt-image-1`. Defaults to `dall-e-2` unless a parameter specific to + `gpt-image-1` is used. + + moderation: Control the content-moderation level for images generated by `gpt-image-1`. Must + be either `low` for less restrictive filtering or `auto` (default value). + + n: The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only + `n=1` is supported. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. + + - `auto` (default value) will automatically select the best quality for the + given model. + - `high`, `medium` and `low` are supported for `gpt-image-1`. + - `hd` and `standard` are supported for `dall-e-3`. + - `standard` is the only option for `dall-e-2`. + + response_format: The format in which generated images with `dall-e-2` and `dall-e-3` are + returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes + after the image has been generated. This parameter isn't supported for + `gpt-image-1` which will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and + one of `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`. + + stream: Generate the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + + style: The style of the generated images. This parameter is only supported for + `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean + towards generating hyper-real and dramatic images. Natural causes the model to + produce more natural, less hyper-real looking images. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @overload + def generate( + self, + *, + prompt: str, + stream: Literal[True], + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[ + Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] + ] + | NotGiven = NOT_GIVEN, + style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> Stream[ImageGenStreamEvent]: + """ + Creates an image given a prompt. + [Learn more](https://platform.openai.com/docs/guides/images). + + Args: + prompt: A text description of the desired image(s). The maximum length is 32000 + characters for `gpt-image-1`, 1000 characters for `dall-e-2` and 4000 characters + for `dall-e-3`. + + stream: Generate the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + model: The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or + `gpt-image-1`. Defaults to `dall-e-2` unless a parameter specific to + `gpt-image-1` is used. + + moderation: Control the content-moderation level for images generated by `gpt-image-1`. Must + be either `low` for less restrictive filtering or `auto` (default value). + + n: The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only + `n=1` is supported. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. + + - `auto` (default value) will automatically select the best quality for the + given model. + - `high`, `medium` and `low` are supported for `gpt-image-1`. + - `hd` and `standard` are supported for `dall-e-3`. + - `standard` is the only option for `dall-e-2`. + + response_format: The format in which generated images with `dall-e-2` and `dall-e-3` are + returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes + after the image has been generated. This parameter isn't supported for + `gpt-image-1` which will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and + one of `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`. + + style: The style of the generated images. This parameter is only supported for + `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean + towards generating hyper-real and dramatic images. Natural causes the model to + produce more natural, less hyper-real looking images. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @overload + def generate( + self, + *, + prompt: str, + stream: bool, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[ + Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] + ] + | NotGiven = NOT_GIVEN, + style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse | Stream[ImageGenStreamEvent]: + """ + Creates an image given a prompt. + [Learn more](https://platform.openai.com/docs/guides/images). + + Args: + prompt: A text description of the desired image(s). The maximum length is 32000 + characters for `gpt-image-1`, 1000 characters for `dall-e-2` and 4000 characters + for `dall-e-3`. + + stream: Generate the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + model: The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or + `gpt-image-1`. Defaults to `dall-e-2` unless a parameter specific to + `gpt-image-1` is used. + + moderation: Control the content-moderation level for images generated by `gpt-image-1`. Must + be either `low` for less restrictive filtering or `auto` (default value). + + n: The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only + `n=1` is supported. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. + + - `auto` (default value) will automatically select the best quality for the + given model. + - `high`, `medium` and `low` are supported for `gpt-image-1`. + - `hd` and `standard` are supported for `dall-e-3`. + - `standard` is the only option for `dall-e-2`. + + response_format: The format in which generated images with `dall-e-2` and `dall-e-3` are + returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes + after the image has been generated. This parameter isn't supported for + `gpt-image-1` which will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and + one of `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`. + + style: The style of the generated images. This parameter is only supported for + `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean + towards generating hyper-real and dramatic images. Natural causes the model to + produce more natural, less hyper-real looking images. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @required_args(["prompt"], ["prompt", "stream"]) + def generate( + self, + *, + prompt: str, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[ + Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] + ] + | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse | Stream[ImageGenStreamEvent]: + return self._post( + "/images/generations", + body=maybe_transform( + { + "prompt": prompt, + "background": background, + "model": model, + "moderation": moderation, + "n": n, + "output_compression": output_compression, + "output_format": output_format, + "partial_images": partial_images, + "quality": quality, + "response_format": response_format, + "size": size, + "stream": stream, + "style": style, + "user": user, + }, + image_generate_params.ImageGenerateParamsStreaming + if stream + else image_generate_params.ImageGenerateParamsNonStreaming, + ), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ImagesResponse, + stream=stream or False, + stream_cls=Stream[ImageGenStreamEvent], + ) + + +class AsyncImages(AsyncAPIResource): + @cached_property + def with_raw_response(self) -> AsyncImagesWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers + """ + return AsyncImagesWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncImagesWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/openai/openai-python#with_streaming_response + """ + return AsyncImagesWithStreamingResponse(self) + + async def create_variation( + self, + *, + image: FileTypes, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[Literal["256x256", "512x512", "1024x1024"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse: + """Creates a variation of a given image. + + This endpoint only supports `dall-e-2`. + + Args: + image: The image to use as the basis for the variation(s). Must be a valid PNG file, + less than 4MB, and square. + + model: The model to use for image generation. Only `dall-e-2` is supported at this + time. + + n: The number of images to generate. Must be between 1 and 10. + + response_format: The format in which the generated images are returned. Must be one of `url` or + `b64_json`. URLs are only valid for 60 minutes after the image has been + generated. + + size: The size of the generated images. Must be one of `256x256`, `512x512`, or + `1024x1024`. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + body = deepcopy_minimal( + { + "image": image, + "model": model, + "n": n, + "response_format": response_format, + "size": size, + "user": user, + } + ) + files = extract_files(cast(Mapping[str, object], body), paths=[["image"]]) + # It should be noted that the actual Content-Type header that will be + # sent to the server will contain a `boundary` parameter, e.g. + # multipart/form-data; boundary=---abc-- + extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} + return await self._post( + "/images/variations", + body=await async_maybe_transform(body, image_create_variation_params.ImageCreateVariationParams), + files=files, + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=ImagesResponse, + ) + + @overload + async def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, + mask: FileTypes | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] + | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse: + """Creates an edited or extended image given one or more source images and a + prompt. + + This endpoint only supports `gpt-image-1` and `dall-e-2`. + + Args: + image: The image(s) to edit. Must be a supported image file or an array of images. + + For `gpt-image-1`, each image should be a `png`, `webp`, or `jpg` file less than + 50MB. You can provide up to 16 images. + + For `dall-e-2`, you can only provide one image, and it should be a square `png` + file less than 4MB. + + prompt: A text description of the desired image(s). The maximum length is 1000 + characters for `dall-e-2`, and 32000 characters for `gpt-image-1`. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + input_fidelity: Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + + mask: An additional image whose fully transparent areas (e.g. where alpha is zero) + indicate where `image` should be edited. If there are multiple images provided, + the mask will be applied on the first image. Must be a valid PNG file, less than + 4MB, and have the same dimensions as `image`. + + model: The model to use for image generation. Only `dall-e-2` and `gpt-image-1` are + supported. Defaults to `dall-e-2` unless a parameter specific to `gpt-image-1` + is used. + + n: The number of images to generate. Must be between 1 and 10. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. The + default value is `png`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. `high`, `medium` and `low` are + only supported for `gpt-image-1`. `dall-e-2` only supports `standard` quality. + Defaults to `auto`. + + response_format: The format in which the generated images are returned. Must be one of `url` or + `b64_json`. URLs are only valid for 60 minutes after the image has been + generated. This parameter is only supported for `dall-e-2`, as `gpt-image-1` + will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, and one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`. + + stream: Edit the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @overload + async def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + stream: Literal[True], + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, + mask: FileTypes | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] + | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> AsyncStream[ImageEditStreamEvent]: + """Creates an edited or extended image given one or more source images and a + prompt. + + This endpoint only supports `gpt-image-1` and `dall-e-2`. + + Args: + image: The image(s) to edit. Must be a supported image file or an array of images. + + For `gpt-image-1`, each image should be a `png`, `webp`, or `jpg` file less than + 50MB. You can provide up to 16 images. + + For `dall-e-2`, you can only provide one image, and it should be a square `png` + file less than 4MB. + + prompt: A text description of the desired image(s). The maximum length is 1000 + characters for `dall-e-2`, and 32000 characters for `gpt-image-1`. + + stream: Edit the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + input_fidelity: Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + + mask: An additional image whose fully transparent areas (e.g. where alpha is zero) + indicate where `image` should be edited. If there are multiple images provided, + the mask will be applied on the first image. Must be a valid PNG file, less than + 4MB, and have the same dimensions as `image`. + + model: The model to use for image generation. Only `dall-e-2` and `gpt-image-1` are + supported. Defaults to `dall-e-2` unless a parameter specific to `gpt-image-1` + is used. + + n: The number of images to generate. Must be between 1 and 10. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. The + default value is `png`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. `high`, `medium` and `low` are + only supported for `gpt-image-1`. `dall-e-2` only supports `standard` quality. + Defaults to `auto`. + + response_format: The format in which the generated images are returned. Must be one of `url` or + `b64_json`. URLs are only valid for 60 minutes after the image has been + generated. This parameter is only supported for `dall-e-2`, as `gpt-image-1` + will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, and one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @overload + async def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + stream: bool, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, + mask: FileTypes | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] + | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse | AsyncStream[ImageEditStreamEvent]: + """Creates an edited or extended image given one or more source images and a + prompt. + + This endpoint only supports `gpt-image-1` and `dall-e-2`. + + Args: + image: The image(s) to edit. Must be a supported image file or an array of images. + + For `gpt-image-1`, each image should be a `png`, `webp`, or `jpg` file less than + 50MB. You can provide up to 16 images. + + For `dall-e-2`, you can only provide one image, and it should be a square `png` + file less than 4MB. + + prompt: A text description of the desired image(s). The maximum length is 1000 + characters for `dall-e-2`, and 32000 characters for `gpt-image-1`. + + stream: Edit the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + input_fidelity: Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + + mask: An additional image whose fully transparent areas (e.g. where alpha is zero) + indicate where `image` should be edited. If there are multiple images provided, + the mask will be applied on the first image. Must be a valid PNG file, less than + 4MB, and have the same dimensions as `image`. + + model: The model to use for image generation. Only `dall-e-2` and `gpt-image-1` are + supported. Defaults to `dall-e-2` unless a parameter specific to `gpt-image-1` + is used. + + n: The number of images to generate. Must be between 1 and 10. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. The + default value is `png`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. `high`, `medium` and `low` are + only supported for `gpt-image-1`. `dall-e-2` only supports `standard` quality. + Defaults to `auto`. + + response_format: The format in which the generated images are returned. Must be one of `url` or + `b64_json`. URLs are only valid for 60 minutes after the image has been + generated. This parameter is only supported for `dall-e-2`, as `gpt-image-1` + will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, and one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @required_args(["image", "prompt"], ["image", "prompt", "stream"]) + async def edit( + self, + *, + image: Union[FileTypes, List[FileTypes]], + prompt: str, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + input_fidelity: Optional[Literal["high", "low"]] | NotGiven = NOT_GIVEN, + mask: FileTypes | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[Literal["256x256", "512x512", "1024x1024", "1536x1024", "1024x1536", "auto"]] + | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse | AsyncStream[ImageEditStreamEvent]: + body = deepcopy_minimal( + { + "image": image, + "prompt": prompt, + "background": background, + "input_fidelity": input_fidelity, + "mask": mask, + "model": model, + "n": n, + "output_compression": output_compression, + "output_format": output_format, + "partial_images": partial_images, + "quality": quality, + "response_format": response_format, "size": size, + "stream": stream, "user": user, } ) @@ -541,14 +1397,20 @@ async def edit( extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})} return await self._post( "/images/edits", - body=await async_maybe_transform(body, image_edit_params.ImageEditParams), + body=await async_maybe_transform( + body, + image_edit_params.ImageEditParamsStreaming if stream else image_edit_params.ImageEditParamsNonStreaming, + ), files=files, options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), cast_to=ImagesResponse, + stream=stream or False, + stream_cls=AsyncStream[ImageEditStreamEvent], ) + @overload async def generate( self, *, @@ -559,12 +1421,14 @@ async def generate( n: Optional[int] | NotGiven = NOT_GIVEN, output_compression: Optional[int] | NotGiven = NOT_GIVEN, output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, size: Optional[ Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] ] | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -608,6 +1472,237 @@ async def generate( output_format: The format in which the generated images are returned. This parameter is only supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. + + - `auto` (default value) will automatically select the best quality for the + given model. + - `high`, `medium` and `low` are supported for `gpt-image-1`. + - `hd` and `standard` are supported for `dall-e-3`. + - `standard` is the only option for `dall-e-2`. + + response_format: The format in which generated images with `dall-e-2` and `dall-e-3` are + returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes + after the image has been generated. This parameter isn't supported for + `gpt-image-1` which will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and + one of `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`. + + stream: Generate the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + + style: The style of the generated images. This parameter is only supported for + `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean + towards generating hyper-real and dramatic images. Natural causes the model to + produce more natural, less hyper-real looking images. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @overload + async def generate( + self, + *, + prompt: str, + stream: Literal[True], + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[ + Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] + ] + | NotGiven = NOT_GIVEN, + style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> AsyncStream[ImageGenStreamEvent]: + """ + Creates an image given a prompt. + [Learn more](https://platform.openai.com/docs/guides/images). + + Args: + prompt: A text description of the desired image(s). The maximum length is 32000 + characters for `gpt-image-1`, 1000 characters for `dall-e-2` and 4000 characters + for `dall-e-3`. + + stream: Generate the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + model: The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or + `gpt-image-1`. Defaults to `dall-e-2` unless a parameter specific to + `gpt-image-1` is used. + + moderation: Control the content-moderation level for images generated by `gpt-image-1`. Must + be either `low` for less restrictive filtering or `auto` (default value). + + n: The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only + `n=1` is supported. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + + quality: The quality of the image that will be generated. + + - `auto` (default value) will automatically select the best quality for the + given model. + - `high`, `medium` and `low` are supported for `gpt-image-1`. + - `hd` and `standard` are supported for `dall-e-3`. + - `standard` is the only option for `dall-e-2`. + + response_format: The format in which generated images with `dall-e-2` and `dall-e-3` are + returned. Must be one of `url` or `b64_json`. URLs are only valid for 60 minutes + after the image has been generated. This parameter isn't supported for + `gpt-image-1` which will always return base64-encoded images. + + size: The size of the generated images. Must be one of `1024x1024`, `1536x1024` + (landscape), `1024x1536` (portrait), or `auto` (default value) for + `gpt-image-1`, one of `256x256`, `512x512`, or `1024x1024` for `dall-e-2`, and + one of `1024x1024`, `1792x1024`, or `1024x1792` for `dall-e-3`. + + style: The style of the generated images. This parameter is only supported for + `dall-e-3`. Must be one of `vivid` or `natural`. Vivid causes the model to lean + towards generating hyper-real and dramatic images. Natural causes the model to + produce more natural, less hyper-real looking images. + + user: A unique identifier representing your end-user, which can help OpenAI to monitor + and detect abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + + @overload + async def generate( + self, + *, + prompt: str, + stream: bool, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[ + Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] + ] + | NotGiven = NOT_GIVEN, + style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse | AsyncStream[ImageGenStreamEvent]: + """ + Creates an image given a prompt. + [Learn more](https://platform.openai.com/docs/guides/images). + + Args: + prompt: A text description of the desired image(s). The maximum length is 32000 + characters for `gpt-image-1`, 1000 characters for `dall-e-2` and 4000 characters + for `dall-e-3`. + + stream: Generate the image in streaming mode. Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + + background: Allows to set transparency for the background of the generated image(s). This + parameter is only supported for `gpt-image-1`. Must be one of `transparent`, + `opaque` or `auto` (default value). When `auto` is used, the model will + automatically determine the best background for the image. + + If `transparent`, the output format needs to support transparency, so it should + be set to either `png` (default value) or `webp`. + + model: The model to use for image generation. One of `dall-e-2`, `dall-e-3`, or + `gpt-image-1`. Defaults to `dall-e-2` unless a parameter specific to + `gpt-image-1` is used. + + moderation: Control the content-moderation level for images generated by `gpt-image-1`. Must + be either `low` for less restrictive filtering or `auto` (default value). + + n: The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only + `n=1` is supported. + + output_compression: The compression level (0-100%) for the generated images. This parameter is only + supported for `gpt-image-1` with the `webp` or `jpeg` output formats, and + defaults to 100. + + output_format: The format in which the generated images are returned. This parameter is only + supported for `gpt-image-1`. Must be one of `png`, `jpeg`, or `webp`. + + partial_images: The number of partial images to generate. This parameter is used for streaming + responses that return partial images. Value must be between 0 and 3. When set to + 0, the response will be a single image sent in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + quality: The quality of the image that will be generated. - `auto` (default value) will automatically select the best quality for the @@ -643,6 +1738,36 @@ async def generate( timeout: Override the client-level default timeout for this request, in seconds """ + ... + + @required_args(["prompt"], ["prompt", "stream"]) + async def generate( + self, + *, + prompt: str, + background: Optional[Literal["transparent", "opaque", "auto"]] | NotGiven = NOT_GIVEN, + model: Union[str, ImageModel, None] | NotGiven = NOT_GIVEN, + moderation: Optional[Literal["low", "auto"]] | NotGiven = NOT_GIVEN, + n: Optional[int] | NotGiven = NOT_GIVEN, + output_compression: Optional[int] | NotGiven = NOT_GIVEN, + output_format: Optional[Literal["png", "jpeg", "webp"]] | NotGiven = NOT_GIVEN, + partial_images: Optional[int] | NotGiven = NOT_GIVEN, + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] | NotGiven = NOT_GIVEN, + response_format: Optional[Literal["url", "b64_json"]] | NotGiven = NOT_GIVEN, + size: Optional[ + Literal["auto", "1024x1024", "1536x1024", "1024x1536", "256x256", "512x512", "1792x1024", "1024x1792"] + ] + | NotGiven = NOT_GIVEN, + stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + style: Optional[Literal["vivid", "natural"]] | NotGiven = NOT_GIVEN, + user: str | NotGiven = NOT_GIVEN, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN, + ) -> ImagesResponse | AsyncStream[ImageGenStreamEvent]: return await self._post( "/images/generations", body=await async_maybe_transform( @@ -654,18 +1779,24 @@ async def generate( "n": n, "output_compression": output_compression, "output_format": output_format, + "partial_images": partial_images, "quality": quality, "response_format": response_format, "size": size, + "stream": stream, "style": style, "user": user, }, - image_generate_params.ImageGenerateParams, + image_generate_params.ImageGenerateParamsStreaming + if stream + else image_generate_params.ImageGenerateParamsNonStreaming, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), cast_to=ImagesResponse, + stream=stream or False, + stream_cls=AsyncStream[ImageGenStreamEvent], ) diff --git a/portkey_ai/_vendor/openai/resources/responses/responses.py b/portkey_ai/_vendor/openai/resources/responses/responses.py index 81ae4e5b..8983daf2 100644 --- a/portkey_ai/_vendor/openai/resources/responses/responses.py +++ b/portkey_ai/_vendor/openai/resources/responses/responses.py @@ -10,7 +10,7 @@ from ... import _legacy_response from ..._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven -from ..._utils import is_given, required_args, maybe_transform, async_maybe_transform +from ..._utils import is_given, maybe_transform, async_maybe_transform from ..._compat import cached_property from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper @@ -41,6 +41,7 @@ from ...types.responses.response_includable import ResponseIncludable from ...types.shared_params.responses_model import ResponsesModel from ...types.responses.response_input_param import ResponseInputParam +from ...types.responses.response_prompt_param import ResponsePromptParam from ...types.responses.response_stream_event import ResponseStreamEvent from ...types.responses.response_text_config_param import ResponseTextConfigParam @@ -75,23 +76,29 @@ def with_streaming_response(self) -> ResponsesWithStreamingResponse: def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -117,43 +124,37 @@ def create( your own data as input for the model's response. Args: - input: Text, image, or file inputs to the model, used to generate a response. - - Learn more: - - - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - - [Image inputs](https://platform.openai.com/docs/guides/images) - - [File inputs](https://platform.openai.com/docs/guides/pdf-files) - - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) - - [Function calling](https://platform.openai.com/docs/guides/function-calling) - - model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a - wide range of models with different capabilities, performance characteristics, - and price points. Refer to the - [model guide](https://platform.openai.com/docs/models) to browse and compare - available models. - background: Whether to run the model response in the background. [Learn more](https://platform.openai.com/docs/guides/background). include: Specify additional output data to include in the model response. Currently supported values are: + - `code_interpreter_call.outputs`: Includes the outputs of python code execution + in code interpreter tool call items. + - `computer_call_output.output.image_url`: Include image urls from the computer + call output. - `file_search_call.results`: Include the search results of the file search tool call. - `message.input_image.image_url`: Include image urls from the input message. - - `computer_call_output.output.image_url`: Include image urls from the computer - call output. + - `message.output_text.logprobs`: Include logprobs with assistant messages. - `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in reasoning item outputs. This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly (like when the `store` parameter is set to `false`, or when an organization is enrolled in the zero data retention program). - - `code_interpreter_call.outputs`: Includes the outputs of python code execution - in code interpreter tool call items. - instructions: Inserts a system (or developer) message as the first item in the model's - context. + input: Text, image, or file inputs to the model, used to generate a response. + + Learn more: + + - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + - [Image inputs](https://platform.openai.com/docs/guides/images) + - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + - [Function calling](https://platform.openai.com/docs/guides/function-calling) + + instructions: A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -163,6 +164,11 @@ def create( including visible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + max_tool_calls: The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + metadata: Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. @@ -170,34 +176,53 @@ def create( Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters. + model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + wide range of models with different capabilities, performance characteristics, + and price points. Refer to the + [model guide](https://platform.openai.com/docs/models) to browse and compare + available models. + parallel_tool_calls: Whether to allow the model to run tool calls in parallel. previous_response_id: The unique ID of the previous response to the model. Use this to create multi-turn conversations. Learn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state). + prompt: Reference to a prompt template and its variables. + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + reasoning: **o-series models only** Configuration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning). - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. store: Whether to store the generated model response for later retrieval via API. @@ -208,6 +233,8 @@ def create( [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) for more information. + stream_options: Options for streaming responses. Only set this when you set `stream: true`. + temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or `top_p` but @@ -235,8 +262,13 @@ def create( Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. + + top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. top_p: An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 @@ -252,9 +284,11 @@ def create( - `disabled` (default): If a model response will exceed the context window size for a model, the request will fail with a 400 error. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). extra_headers: Send extra headers @@ -270,23 +304,29 @@ def create( def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, stream: Literal[True], background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -312,22 +352,6 @@ def create( your own data as input for the model's response. Args: - input: Text, image, or file inputs to the model, used to generate a response. - - Learn more: - - - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - - [Image inputs](https://platform.openai.com/docs/guides/images) - - [File inputs](https://platform.openai.com/docs/guides/pdf-files) - - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) - - [Function calling](https://platform.openai.com/docs/guides/function-calling) - - model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a - wide range of models with different capabilities, performance characteristics, - and price points. Refer to the - [model guide](https://platform.openai.com/docs/models) to browse and compare - available models. - stream: If set to true, the model response data will be streamed to the client as it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). @@ -341,21 +365,31 @@ def create( include: Specify additional output data to include in the model response. Currently supported values are: + - `code_interpreter_call.outputs`: Includes the outputs of python code execution + in code interpreter tool call items. + - `computer_call_output.output.image_url`: Include image urls from the computer + call output. - `file_search_call.results`: Include the search results of the file search tool call. - `message.input_image.image_url`: Include image urls from the input message. - - `computer_call_output.output.image_url`: Include image urls from the computer - call output. + - `message.output_text.logprobs`: Include logprobs with assistant messages. - `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in reasoning item outputs. This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly (like when the `store` parameter is set to `false`, or when an organization is enrolled in the zero data retention program). - - `code_interpreter_call.outputs`: Includes the outputs of python code execution - in code interpreter tool call items. - instructions: Inserts a system (or developer) message as the first item in the model's - context. + input: Text, image, or file inputs to the model, used to generate a response. + + Learn more: + + - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + - [Image inputs](https://platform.openai.com/docs/guides/images) + - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + - [Function calling](https://platform.openai.com/docs/guides/function-calling) + + instructions: A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -365,6 +399,11 @@ def create( including visible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + max_tool_calls: The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + metadata: Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. @@ -372,37 +411,58 @@ def create( Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters. + model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + wide range of models with different capabilities, performance characteristics, + and price points. Refer to the + [model guide](https://platform.openai.com/docs/models) to browse and compare + available models. + parallel_tool_calls: Whether to allow the model to run tool calls in parallel. previous_response_id: The unique ID of the previous response to the model. Use this to create multi-turn conversations. Learn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state). + prompt: Reference to a prompt template and its variables. + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + reasoning: **o-series models only** Configuration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning). - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. store: Whether to store the generated model response for later retrieval via API. + stream_options: Options for streaming responses. Only set this when you set `stream: true`. + temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or `top_p` but @@ -430,8 +490,13 @@ def create( Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. + + top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. top_p: An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 @@ -447,9 +512,11 @@ def create( - `disabled` (default): If a model response will exceed the context window size for a model, the request will fail with a 400 error. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). extra_headers: Send extra headers @@ -465,23 +532,29 @@ def create( def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, stream: bool, background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -507,22 +580,6 @@ def create( your own data as input for the model's response. Args: - input: Text, image, or file inputs to the model, used to generate a response. - - Learn more: - - - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - - [Image inputs](https://platform.openai.com/docs/guides/images) - - [File inputs](https://platform.openai.com/docs/guides/pdf-files) - - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) - - [Function calling](https://platform.openai.com/docs/guides/function-calling) - - model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a - wide range of models with different capabilities, performance characteristics, - and price points. Refer to the - [model guide](https://platform.openai.com/docs/models) to browse and compare - available models. - stream: If set to true, the model response data will be streamed to the client as it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). @@ -536,21 +593,31 @@ def create( include: Specify additional output data to include in the model response. Currently supported values are: + - `code_interpreter_call.outputs`: Includes the outputs of python code execution + in code interpreter tool call items. + - `computer_call_output.output.image_url`: Include image urls from the computer + call output. - `file_search_call.results`: Include the search results of the file search tool call. - `message.input_image.image_url`: Include image urls from the input message. - - `computer_call_output.output.image_url`: Include image urls from the computer - call output. + - `message.output_text.logprobs`: Include logprobs with assistant messages. - `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in reasoning item outputs. This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly (like when the `store` parameter is set to `false`, or when an organization is enrolled in the zero data retention program). - - `code_interpreter_call.outputs`: Includes the outputs of python code execution - in code interpreter tool call items. - instructions: Inserts a system (or developer) message as the first item in the model's - context. + input: Text, image, or file inputs to the model, used to generate a response. + + Learn more: + + - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + - [Image inputs](https://platform.openai.com/docs/guides/images) + - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + - [Function calling](https://platform.openai.com/docs/guides/function-calling) + + instructions: A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -560,6 +627,11 @@ def create( including visible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + max_tool_calls: The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + metadata: Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. @@ -567,37 +639,58 @@ def create( Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters. + model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + wide range of models with different capabilities, performance characteristics, + and price points. Refer to the + [model guide](https://platform.openai.com/docs/models) to browse and compare + available models. + parallel_tool_calls: Whether to allow the model to run tool calls in parallel. previous_response_id: The unique ID of the previous response to the model. Use this to create multi-turn conversations. Learn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state). + prompt: Reference to a prompt template and its variables. + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + reasoning: **o-series models only** Configuration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning). - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. store: Whether to store the generated model response for later retrieval via API. + stream_options: Options for streaming responses. Only set this when you set `stream: true`. + temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or `top_p` but @@ -625,8 +718,13 @@ def create( Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. + + top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. top_p: An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 @@ -642,9 +740,11 @@ def create( - `disabled` (default): If a model response will exceed the context window size for a model, the request will fail with a 400 error. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). extra_headers: Send extra headers @@ -656,27 +756,32 @@ def create( """ ... - @required_args(["input", "model"], ["input", "model", "stream"]) def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -691,23 +796,29 @@ def create( "/responses", body=maybe_transform( { - "input": input, - "model": model, "background": background, "include": include, + "input": input, "instructions": instructions, "max_output_tokens": max_output_tokens, + "max_tool_calls": max_tool_calls, "metadata": metadata, + "model": model, "parallel_tool_calls": parallel_tool_calls, "previous_response_id": previous_response_id, + "prompt": prompt, + "prompt_cache_key": prompt_cache_key, "reasoning": reasoning, + "safety_identifier": safety_identifier, "service_tier": service_tier, "store": store, "stream": stream, + "stream_options": stream_options, "temperature": temperature, "text": text, "tool_choice": tool_choice, "tools": tools, + "top_logprobs": top_logprobs, "top_p": top_p, "truncation": truncation, "user": user, @@ -756,6 +867,7 @@ def stream( previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, @@ -787,6 +899,7 @@ def stream( previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, @@ -812,6 +925,7 @@ def stream( "previous_response_id": previous_response_id, "reasoning": reasoning, "store": store, + "stream_options": stream_options, "temperature": temperature, "text": text, "tool_choice": tool_choice, @@ -856,6 +970,7 @@ def stream( parallel_tool_calls=parallel_tool_calls, previous_response_id=previous_response_id, store=store, + stream_options=stream_options, stream=True, temperature=temperature, text=text, @@ -895,25 +1010,34 @@ def stream( def parse( self, *, - input: Union[str, ResponseInputParam], - model: Union[str, ChatModel], text_format: type[TextFormatT] | NotGiven = NOT_GIVEN, - tools: Iterable[ParseableToolParam] | NotGiven = NOT_GIVEN, + background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, + tools: Iterable[ParseableToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -943,24 +1067,33 @@ def parser(raw_response: Response) -> ParsedResponse[TextFormatT]: "/responses", body=maybe_transform( { - "input": input, - "model": model, + "background": background, "include": include, + "input": input, "instructions": instructions, "max_output_tokens": max_output_tokens, + "max_tool_calls": max_tool_calls, "metadata": metadata, + "model": model, "parallel_tool_calls": parallel_tool_calls, "previous_response_id": previous_response_id, + "prompt": prompt, + "prompt_cache_key": prompt_cache_key, "reasoning": reasoning, + "safety_identifier": safety_identifier, + "service_tier": service_tier, "store": store, "stream": stream, + "stream_options": stream_options, "temperature": temperature, "text": text, "tool_choice": tool_choice, "tools": tools, + "top_logprobs": top_logprobs, "top_p": top_p, "truncation": truncation, "user": user, + "verbosity": verbosity, }, response_create_params.ResponseCreateParams, ), @@ -982,6 +1115,7 @@ def retrieve( response_id: str, *, include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, stream: Literal[False] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1046,6 +1180,13 @@ def retrieve( include: Additional fields to include in the response. See the `include` parameter for Response creation above for more information. + include_obfuscation: When true, stream obfuscation will be enabled. Stream obfuscation adds random + characters to an `obfuscation` field on streaming delta events to normalize + payload sizes as a mitigation to certain side-channel attacks. These obfuscation + fields are included by default, but add a small amount of overhead to the data + stream. You can set `include_obfuscation` to false to optimize for bandwidth if + you trust the network links between your application and the OpenAI API. + starting_after: The sequence number of the event after which to start streaming. stream: If set to true, the model response data will be streamed to the client as it is @@ -1072,6 +1213,7 @@ def retrieve( *, stream: Literal[True], include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1094,6 +1236,13 @@ def retrieve( include: Additional fields to include in the response. See the `include` parameter for Response creation above for more information. + include_obfuscation: When true, stream obfuscation will be enabled. Stream obfuscation adds random + characters to an `obfuscation` field on streaming delta events to normalize + payload sizes as a mitigation to certain side-channel attacks. These obfuscation + fields are included by default, but add a small amount of overhead to the data + stream. You can set `include_obfuscation` to false to optimize for bandwidth if + you trust the network links between your application and the OpenAI API. + starting_after: The sequence number of the event after which to start streaming. extra_headers: Send extra headers @@ -1113,6 +1262,7 @@ def retrieve( *, stream: bool, include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1135,6 +1285,13 @@ def retrieve( include: Additional fields to include in the response. See the `include` parameter for Response creation above for more information. + include_obfuscation: When true, stream obfuscation will be enabled. Stream obfuscation adds random + characters to an `obfuscation` field on streaming delta events to normalize + payload sizes as a mitigation to certain side-channel attacks. These obfuscation + fields are included by default, but add a small amount of overhead to the data + stream. You can set `include_obfuscation` to false to optimize for bandwidth if + you trust the network links between your application and the OpenAI API. + starting_after: The sequence number of the event after which to start streaming. extra_headers: Send extra headers @@ -1152,6 +1309,7 @@ def retrieve( response_id: str, *, include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, stream: Literal[False] | Literal[True] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1173,6 +1331,7 @@ def retrieve( query=maybe_transform( { "include": include, + "include_obfuscation": include_obfuscation, "starting_after": starting_after, "stream": stream, }, @@ -1283,23 +1442,29 @@ def with_streaming_response(self) -> AsyncResponsesWithStreamingResponse: async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -1325,43 +1490,37 @@ async def create( your own data as input for the model's response. Args: - input: Text, image, or file inputs to the model, used to generate a response. - - Learn more: - - - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - - [Image inputs](https://platform.openai.com/docs/guides/images) - - [File inputs](https://platform.openai.com/docs/guides/pdf-files) - - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) - - [Function calling](https://platform.openai.com/docs/guides/function-calling) - - model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a - wide range of models with different capabilities, performance characteristics, - and price points. Refer to the - [model guide](https://platform.openai.com/docs/models) to browse and compare - available models. - background: Whether to run the model response in the background. [Learn more](https://platform.openai.com/docs/guides/background). include: Specify additional output data to include in the model response. Currently supported values are: + - `code_interpreter_call.outputs`: Includes the outputs of python code execution + in code interpreter tool call items. + - `computer_call_output.output.image_url`: Include image urls from the computer + call output. - `file_search_call.results`: Include the search results of the file search tool call. - `message.input_image.image_url`: Include image urls from the input message. - - `computer_call_output.output.image_url`: Include image urls from the computer - call output. + - `message.output_text.logprobs`: Include logprobs with assistant messages. - `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in reasoning item outputs. This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly (like when the `store` parameter is set to `false`, or when an organization is enrolled in the zero data retention program). - - `code_interpreter_call.outputs`: Includes the outputs of python code execution - in code interpreter tool call items. - instructions: Inserts a system (or developer) message as the first item in the model's - context. + input: Text, image, or file inputs to the model, used to generate a response. + + Learn more: + + - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + - [Image inputs](https://platform.openai.com/docs/guides/images) + - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + - [Function calling](https://platform.openai.com/docs/guides/function-calling) + + instructions: A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -1371,6 +1530,11 @@ async def create( including visible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + max_tool_calls: The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + metadata: Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. @@ -1378,34 +1542,53 @@ async def create( Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters. + model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + wide range of models with different capabilities, performance characteristics, + and price points. Refer to the + [model guide](https://platform.openai.com/docs/models) to browse and compare + available models. + parallel_tool_calls: Whether to allow the model to run tool calls in parallel. previous_response_id: The unique ID of the previous response to the model. Use this to create multi-turn conversations. Learn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state). + prompt: Reference to a prompt template and its variables. + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + reasoning: **o-series models only** Configuration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning). - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. store: Whether to store the generated model response for later retrieval via API. @@ -1416,6 +1599,8 @@ async def create( [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming) for more information. + stream_options: Options for streaming responses. Only set this when you set `stream: true`. + temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or `top_p` but @@ -1443,8 +1628,13 @@ async def create( Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. + + top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. top_p: An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 @@ -1460,9 +1650,11 @@ async def create( - `disabled` (default): If a model response will exceed the context window size for a model, the request will fail with a 400 error. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). extra_headers: Send extra headers @@ -1478,23 +1670,29 @@ async def create( async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, stream: Literal[True], background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -1520,22 +1718,6 @@ async def create( your own data as input for the model's response. Args: - input: Text, image, or file inputs to the model, used to generate a response. - - Learn more: - - - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - - [Image inputs](https://platform.openai.com/docs/guides/images) - - [File inputs](https://platform.openai.com/docs/guides/pdf-files) - - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) - - [Function calling](https://platform.openai.com/docs/guides/function-calling) - - model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a - wide range of models with different capabilities, performance characteristics, - and price points. Refer to the - [model guide](https://platform.openai.com/docs/models) to browse and compare - available models. - stream: If set to true, the model response data will be streamed to the client as it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). @@ -1549,21 +1731,31 @@ async def create( include: Specify additional output data to include in the model response. Currently supported values are: + - `code_interpreter_call.outputs`: Includes the outputs of python code execution + in code interpreter tool call items. + - `computer_call_output.output.image_url`: Include image urls from the computer + call output. - `file_search_call.results`: Include the search results of the file search tool call. - `message.input_image.image_url`: Include image urls from the input message. - - `computer_call_output.output.image_url`: Include image urls from the computer - call output. + - `message.output_text.logprobs`: Include logprobs with assistant messages. - `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in reasoning item outputs. This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly (like when the `store` parameter is set to `false`, or when an organization is enrolled in the zero data retention program). - - `code_interpreter_call.outputs`: Includes the outputs of python code execution - in code interpreter tool call items. - instructions: Inserts a system (or developer) message as the first item in the model's - context. + input: Text, image, or file inputs to the model, used to generate a response. + + Learn more: + + - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + - [Image inputs](https://platform.openai.com/docs/guides/images) + - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + - [Function calling](https://platform.openai.com/docs/guides/function-calling) + + instructions: A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -1573,6 +1765,11 @@ async def create( including visible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + max_tool_calls: The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + metadata: Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. @@ -1580,37 +1777,58 @@ async def create( Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters. + model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + wide range of models with different capabilities, performance characteristics, + and price points. Refer to the + [model guide](https://platform.openai.com/docs/models) to browse and compare + available models. + parallel_tool_calls: Whether to allow the model to run tool calls in parallel. previous_response_id: The unique ID of the previous response to the model. Use this to create multi-turn conversations. Learn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state). + prompt: Reference to a prompt template and its variables. + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + reasoning: **o-series models only** Configuration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning). - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. store: Whether to store the generated model response for later retrieval via API. + stream_options: Options for streaming responses. Only set this when you set `stream: true`. + temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or `top_p` but @@ -1638,8 +1856,13 @@ async def create( Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. + + top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. top_p: An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 @@ -1655,9 +1878,11 @@ async def create( - `disabled` (default): If a model response will exceed the context window size for a model, the request will fail with a 400 error. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). extra_headers: Send extra headers @@ -1673,23 +1898,29 @@ async def create( async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, stream: bool, background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -1715,22 +1946,6 @@ async def create( your own data as input for the model's response. Args: - input: Text, image, or file inputs to the model, used to generate a response. - - Learn more: - - - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - - [Image inputs](https://platform.openai.com/docs/guides/images) - - [File inputs](https://platform.openai.com/docs/guides/pdf-files) - - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) - - [Function calling](https://platform.openai.com/docs/guides/function-calling) - - model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a - wide range of models with different capabilities, performance characteristics, - and price points. Refer to the - [model guide](https://platform.openai.com/docs/models) to browse and compare - available models. - stream: If set to true, the model response data will be streamed to the client as it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). @@ -1744,21 +1959,31 @@ async def create( include: Specify additional output data to include in the model response. Currently supported values are: + - `code_interpreter_call.outputs`: Includes the outputs of python code execution + in code interpreter tool call items. + - `computer_call_output.output.image_url`: Include image urls from the computer + call output. - `file_search_call.results`: Include the search results of the file search tool call. - `message.input_image.image_url`: Include image urls from the input message. - - `computer_call_output.output.image_url`: Include image urls from the computer - call output. + - `message.output_text.logprobs`: Include logprobs with assistant messages. - `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in reasoning item outputs. This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly (like when the `store` parameter is set to `false`, or when an organization is enrolled in the zero data retention program). - - `code_interpreter_call.outputs`: Includes the outputs of python code execution - in code interpreter tool call items. - instructions: Inserts a system (or developer) message as the first item in the model's - context. + input: Text, image, or file inputs to the model, used to generate a response. + + Learn more: + + - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + - [Image inputs](https://platform.openai.com/docs/guides/images) + - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + - [Function calling](https://platform.openai.com/docs/guides/function-calling) + + instructions: A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -1768,6 +1993,11 @@ async def create( including visible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). + max_tool_calls: The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + metadata: Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. @@ -1775,37 +2005,58 @@ async def create( Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters. + model: Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI offers a + wide range of models with different capabilities, performance characteristics, + and price points. Refer to the + [model guide](https://platform.openai.com/docs/models) to browse and compare + available models. + parallel_tool_calls: Whether to allow the model to run tool calls in parallel. previous_response_id: The unique ID of the previous response to the model. Use this to create multi-turn conversations. Learn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state). + prompt: Reference to a prompt template and its variables. + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + + prompt_cache_key: Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + reasoning: **o-series models only** Configuration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning). - service_tier: Specifies the latency tier to use for processing the request. This parameter is - relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + safety_identifier: A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + + service_tier: Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. store: Whether to store the generated model response for later retrieval via API. + stream_options: Options for streaming responses. Only set this when you set `stream: true`. + temperature: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or `top_p` but @@ -1833,8 +2084,13 @@ async def create( Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. + + top_logprobs: An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. top_p: An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 @@ -1850,9 +2106,11 @@ async def create( - `disabled` (default): If a model response will exceed the context window size for a model, the request will fail with a 400 error. - user: A stable identifier for your end-users. Used to boost cache hit rates by better - bucketing similar requests and to help OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + user: This field is being replaced by `safety_identifier` and `prompt_cache_key`. Use + `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). extra_headers: Send extra headers @@ -1864,27 +2122,32 @@ async def create( """ ... - @required_args(["input", "model"], ["input", "model", "stream"]) async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, - service_tier: Optional[Literal["auto", "default", "flex"]] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, tools: Iterable[ToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, @@ -1899,23 +2162,29 @@ async def create( "/responses", body=await async_maybe_transform( { - "input": input, - "model": model, "background": background, "include": include, + "input": input, "instructions": instructions, "max_output_tokens": max_output_tokens, + "max_tool_calls": max_tool_calls, "metadata": metadata, + "model": model, "parallel_tool_calls": parallel_tool_calls, "previous_response_id": previous_response_id, + "prompt": prompt, + "prompt_cache_key": prompt_cache_key, "reasoning": reasoning, + "safety_identifier": safety_identifier, "service_tier": service_tier, "store": store, "stream": stream, + "stream_options": stream_options, "temperature": temperature, "text": text, "tool_choice": tool_choice, "tools": tools, + "top_logprobs": top_logprobs, "top_p": top_p, "truncation": truncation, "user": user, @@ -1964,6 +2233,7 @@ def stream( previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, @@ -1995,6 +2265,7 @@ def stream( previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, @@ -2020,6 +2291,7 @@ def stream( "previous_response_id": previous_response_id, "reasoning": reasoning, "store": store, + "stream_options": stream_options, "temperature": temperature, "text": text, "tool_choice": tool_choice, @@ -2065,6 +2337,7 @@ def stream( parallel_tool_calls=parallel_tool_calls, previous_response_id=previous_response_id, store=store, + stream_options=stream_options, temperature=temperature, text=text, tool_choice=tool_choice, @@ -2107,25 +2380,34 @@ def stream( async def parse( self, *, - input: Union[str, ResponseInputParam], - model: Union[str, ChatModel], text_format: type[TextFormatT] | NotGiven = NOT_GIVEN, - tools: Iterable[ParseableToolParam] | NotGiven = NOT_GIVEN, + background: Optional[bool] | NotGiven = NOT_GIVEN, include: Optional[List[ResponseIncludable]] | NotGiven = NOT_GIVEN, + input: Union[str, ResponseInputParam] | NotGiven = NOT_GIVEN, instructions: Optional[str] | NotGiven = NOT_GIVEN, max_output_tokens: Optional[int] | NotGiven = NOT_GIVEN, + max_tool_calls: Optional[int] | NotGiven = NOT_GIVEN, metadata: Optional[Metadata] | NotGiven = NOT_GIVEN, + model: ResponsesModel | NotGiven = NOT_GIVEN, parallel_tool_calls: Optional[bool] | NotGiven = NOT_GIVEN, previous_response_id: Optional[str] | NotGiven = NOT_GIVEN, + prompt: Optional[ResponsePromptParam] | NotGiven = NOT_GIVEN, + prompt_cache_key: str | NotGiven = NOT_GIVEN, reasoning: Optional[Reasoning] | NotGiven = NOT_GIVEN, + safety_identifier: str | NotGiven = NOT_GIVEN, + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] | NotGiven = NOT_GIVEN, store: Optional[bool] | NotGiven = NOT_GIVEN, stream: Optional[Literal[False]] | Literal[True] | NotGiven = NOT_GIVEN, + stream_options: Optional[response_create_params.StreamOptions] | NotGiven = NOT_GIVEN, temperature: Optional[float] | NotGiven = NOT_GIVEN, text: ResponseTextConfigParam | NotGiven = NOT_GIVEN, tool_choice: response_create_params.ToolChoice | NotGiven = NOT_GIVEN, + tools: Iterable[ParseableToolParam] | NotGiven = NOT_GIVEN, + top_logprobs: Optional[int] | NotGiven = NOT_GIVEN, top_p: Optional[float] | NotGiven = NOT_GIVEN, truncation: Optional[Literal["auto", "disabled"]] | NotGiven = NOT_GIVEN, user: str | NotGiven = NOT_GIVEN, + verbosity: Optional[Literal["low", "medium", "high"]] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -2155,24 +2437,33 @@ def parser(raw_response: Response) -> ParsedResponse[TextFormatT]: "/responses", body=maybe_transform( { - "input": input, - "model": model, + "background": background, "include": include, + "input": input, "instructions": instructions, "max_output_tokens": max_output_tokens, + "max_tool_calls": max_tool_calls, "metadata": metadata, + "model": model, "parallel_tool_calls": parallel_tool_calls, "previous_response_id": previous_response_id, + "prompt": prompt, + "prompt_cache_key": prompt_cache_key, "reasoning": reasoning, + "safety_identifier": safety_identifier, + "service_tier": service_tier, "store": store, "stream": stream, + "stream_options": stream_options, "temperature": temperature, "text": text, "tool_choice": tool_choice, "tools": tools, + "top_logprobs": top_logprobs, "top_p": top_p, "truncation": truncation, "user": user, + "verbosity": verbosity, }, response_create_params.ResponseCreateParams, ), @@ -2194,6 +2485,7 @@ async def retrieve( response_id: str, *, include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, stream: Literal[False] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -2258,6 +2550,13 @@ async def retrieve( include: Additional fields to include in the response. See the `include` parameter for Response creation above for more information. + include_obfuscation: When true, stream obfuscation will be enabled. Stream obfuscation adds random + characters to an `obfuscation` field on streaming delta events to normalize + payload sizes as a mitigation to certain side-channel attacks. These obfuscation + fields are included by default, but add a small amount of overhead to the data + stream. You can set `include_obfuscation` to false to optimize for bandwidth if + you trust the network links between your application and the OpenAI API. + starting_after: The sequence number of the event after which to start streaming. stream: If set to true, the model response data will be streamed to the client as it is @@ -2284,6 +2583,7 @@ async def retrieve( *, stream: Literal[True], include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -2306,6 +2606,13 @@ async def retrieve( include: Additional fields to include in the response. See the `include` parameter for Response creation above for more information. + include_obfuscation: When true, stream obfuscation will be enabled. Stream obfuscation adds random + characters to an `obfuscation` field on streaming delta events to normalize + payload sizes as a mitigation to certain side-channel attacks. These obfuscation + fields are included by default, but add a small amount of overhead to the data + stream. You can set `include_obfuscation` to false to optimize for bandwidth if + you trust the network links between your application and the OpenAI API. + starting_after: The sequence number of the event after which to start streaming. extra_headers: Send extra headers @@ -2325,6 +2632,7 @@ async def retrieve( *, stream: bool, include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -2347,6 +2655,13 @@ async def retrieve( include: Additional fields to include in the response. See the `include` parameter for Response creation above for more information. + include_obfuscation: When true, stream obfuscation will be enabled. Stream obfuscation adds random + characters to an `obfuscation` field on streaming delta events to normalize + payload sizes as a mitigation to certain side-channel attacks. These obfuscation + fields are included by default, but add a small amount of overhead to the data + stream. You can set `include_obfuscation` to false to optimize for bandwidth if + you trust the network links between your application and the OpenAI API. + starting_after: The sequence number of the event after which to start streaming. extra_headers: Send extra headers @@ -2364,6 +2679,7 @@ async def retrieve( response_id: str, *, include: List[ResponseIncludable] | NotGiven = NOT_GIVEN, + include_obfuscation: bool | NotGiven = NOT_GIVEN, starting_after: int | NotGiven = NOT_GIVEN, stream: Literal[False] | Literal[True] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -2385,6 +2701,7 @@ async def retrieve( query=await async_maybe_transform( { "include": include, + "include_obfuscation": include_obfuscation, "starting_after": starting_after, "stream": stream, }, diff --git a/portkey_ai/_vendor/openai/resources/webhooks.py b/portkey_ai/_vendor/openai/resources/webhooks.py new file mode 100644 index 00000000..3e13d3fa --- /dev/null +++ b/portkey_ai/_vendor/openai/resources/webhooks.py @@ -0,0 +1,210 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import hmac +import json +import time +import base64 +import hashlib +from typing import cast + +from .._types import HeadersLike +from .._utils import get_required_header +from .._models import construct_type +from .._resource import SyncAPIResource, AsyncAPIResource +from .._exceptions import InvalidWebhookSignatureError +from ..types.webhooks.unwrap_webhook_event import UnwrapWebhookEvent + +__all__ = ["Webhooks", "AsyncWebhooks"] + + +class Webhooks(SyncAPIResource): + def unwrap( + self, + payload: str | bytes, + headers: HeadersLike, + *, + secret: str | None = None, + ) -> UnwrapWebhookEvent: + """Validates that the given payload was sent by OpenAI and parses the payload.""" + if secret is None: + secret = self._client.webhook_secret + + self.verify_signature(payload=payload, headers=headers, secret=secret) + + return cast( + UnwrapWebhookEvent, + construct_type( + type_=UnwrapWebhookEvent, + value=json.loads(payload), + ), + ) + + def verify_signature( + self, + payload: str | bytes, + headers: HeadersLike, + *, + secret: str | None = None, + tolerance: int = 300, + ) -> None: + """Validates whether or not the webhook payload was sent by OpenAI. + + Args: + payload: The webhook payload + headers: The webhook headers + secret: The webhook secret (optional, will use client secret if not provided) + tolerance: Maximum age of the webhook in seconds (default: 300 = 5 minutes) + """ + if secret is None: + secret = self._client.webhook_secret + + if secret is None: + raise ValueError( + "The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, " + "on the client class, OpenAI(webhook_secret='123'), or passed to this function" + ) + + signature_header = get_required_header(headers, "webhook-signature") + timestamp = get_required_header(headers, "webhook-timestamp") + webhook_id = get_required_header(headers, "webhook-id") + + # Validate timestamp to prevent replay attacks + try: + timestamp_seconds = int(timestamp) + except ValueError: + raise InvalidWebhookSignatureError("Invalid webhook timestamp format") from None + + now = int(time.time()) + + if now - timestamp_seconds > tolerance: + raise InvalidWebhookSignatureError("Webhook timestamp is too old") from None + + if timestamp_seconds > now + tolerance: + raise InvalidWebhookSignatureError("Webhook timestamp is too new") from None + + # Extract signatures from v1, format + # The signature header can have multiple values, separated by spaces. + # Each value is in the format v1,. We should accept if any match. + signatures: list[str] = [] + for part in signature_header.split(): + if part.startswith("v1,"): + signatures.append(part[3:]) + else: + signatures.append(part) + + # Decode the secret if it starts with whsec_ + if secret.startswith("whsec_"): + decoded_secret = base64.b64decode(secret[6:]) + else: + decoded_secret = secret.encode() + + body = payload.decode("utf-8") if isinstance(payload, bytes) else payload + + # Prepare the signed payload (OpenAI uses webhookId.timestamp.payload format) + signed_payload = f"{webhook_id}.{timestamp}.{body}" + expected_signature = base64.b64encode( + hmac.new(decoded_secret, signed_payload.encode(), hashlib.sha256).digest() + ).decode() + + # Accept if any signature matches + if not any(hmac.compare_digest(expected_signature, sig) for sig in signatures): + raise InvalidWebhookSignatureError( + "The given webhook signature does not match the expected signature" + ) from None + + +class AsyncWebhooks(AsyncAPIResource): + def unwrap( + self, + payload: str | bytes, + headers: HeadersLike, + *, + secret: str | None = None, + ) -> UnwrapWebhookEvent: + """Validates that the given payload was sent by OpenAI and parses the payload.""" + if secret is None: + secret = self._client.webhook_secret + + self.verify_signature(payload=payload, headers=headers, secret=secret) + + body = payload.decode("utf-8") if isinstance(payload, bytes) else payload + return cast( + UnwrapWebhookEvent, + construct_type( + type_=UnwrapWebhookEvent, + value=json.loads(body), + ), + ) + + def verify_signature( + self, + payload: str | bytes, + headers: HeadersLike, + *, + secret: str | None = None, + tolerance: int = 300, + ) -> None: + """Validates whether or not the webhook payload was sent by OpenAI. + + Args: + payload: The webhook payload + headers: The webhook headers + secret: The webhook secret (optional, will use client secret if not provided) + tolerance: Maximum age of the webhook in seconds (default: 300 = 5 minutes) + """ + if secret is None: + secret = self._client.webhook_secret + + if secret is None: + raise ValueError( + "The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, " + "on the client class, OpenAI(webhook_secret='123'), or passed to this function" + ) from None + + signature_header = get_required_header(headers, "webhook-signature") + timestamp = get_required_header(headers, "webhook-timestamp") + webhook_id = get_required_header(headers, "webhook-id") + + # Validate timestamp to prevent replay attacks + try: + timestamp_seconds = int(timestamp) + except ValueError: + raise InvalidWebhookSignatureError("Invalid webhook timestamp format") from None + + now = int(time.time()) + + if now - timestamp_seconds > tolerance: + raise InvalidWebhookSignatureError("Webhook timestamp is too old") from None + + if timestamp_seconds > now + tolerance: + raise InvalidWebhookSignatureError("Webhook timestamp is too new") from None + + # Extract signatures from v1, format + # The signature header can have multiple values, separated by spaces. + # Each value is in the format v1,. We should accept if any match. + signatures: list[str] = [] + for part in signature_header.split(): + if part.startswith("v1,"): + signatures.append(part[3:]) + else: + signatures.append(part) + + # Decode the secret if it starts with whsec_ + if secret.startswith("whsec_"): + decoded_secret = base64.b64decode(secret[6:]) + else: + decoded_secret = secret.encode() + + body = payload.decode("utf-8") if isinstance(payload, bytes) else payload + + # Prepare the signed payload (OpenAI uses webhookId.timestamp.payload format) + signed_payload = f"{webhook_id}.{timestamp}.{body}" + expected_signature = base64.b64encode( + hmac.new(decoded_secret, signed_payload.encode(), hashlib.sha256).digest() + ).decode() + + # Accept if any signature matches + if not any(hmac.compare_digest(expected_signature, sig) for sig in signatures): + raise InvalidWebhookSignatureError("The given webhook signature does not match the expected signature") diff --git a/portkey_ai/_vendor/openai/types/__init__.py b/portkey_ai/_vendor/openai/types/__init__.py index 453b26f5..1844f71b 100644 --- a/portkey_ai/_vendor/openai/types/__init__.py +++ b/portkey_ai/_vendor/openai/types/__init__.py @@ -18,8 +18,11 @@ FunctionDefinition as FunctionDefinition, FunctionParameters as FunctionParameters, ResponseFormatText as ResponseFormatText, + CustomToolInputFormat as CustomToolInputFormat, ResponseFormatJSONObject as ResponseFormatJSONObject, ResponseFormatJSONSchema as ResponseFormatJSONSchema, + ResponseFormatTextPython as ResponseFormatTextPython, + ResponseFormatTextGrammar as ResponseFormatTextGrammar, ) from .upload import Upload as Upload from .embedding import Embedding as Embedding @@ -60,15 +63,19 @@ from .image_generate_params import ImageGenerateParams as ImageGenerateParams from .eval_retrieve_response import EvalRetrieveResponse as EvalRetrieveResponse from .file_chunking_strategy import FileChunkingStrategy as FileChunkingStrategy +from .image_gen_stream_event import ImageGenStreamEvent as ImageGenStreamEvent from .upload_complete_params import UploadCompleteParams as UploadCompleteParams from .container_create_params import ContainerCreateParams as ContainerCreateParams from .container_list_response import ContainerListResponse as ContainerListResponse from .embedding_create_params import EmbeddingCreateParams as EmbeddingCreateParams +from .image_edit_stream_event import ImageEditStreamEvent as ImageEditStreamEvent from .completion_create_params import CompletionCreateParams as CompletionCreateParams from .moderation_create_params import ModerationCreateParams as ModerationCreateParams from .vector_store_list_params import VectorStoreListParams as VectorStoreListParams from .container_create_response import ContainerCreateResponse as ContainerCreateResponse from .create_embedding_response import CreateEmbeddingResponse as CreateEmbeddingResponse +from .image_gen_completed_event import ImageGenCompletedEvent as ImageGenCompletedEvent +from .image_edit_completed_event import ImageEditCompletedEvent as ImageEditCompletedEvent from .moderation_create_response import ModerationCreateResponse as ModerationCreateResponse from .vector_store_create_params import VectorStoreCreateParams as VectorStoreCreateParams from .vector_store_search_params import VectorStoreSearchParams as VectorStoreSearchParams @@ -79,8 +86,10 @@ from .vector_store_search_response import VectorStoreSearchResponse as VectorStoreSearchResponse from .websocket_connection_options import WebsocketConnectionOptions as WebsocketConnectionOptions from .image_create_variation_params import ImageCreateVariationParams as ImageCreateVariationParams +from .image_gen_partial_image_event import ImageGenPartialImageEvent as ImageGenPartialImageEvent from .static_file_chunking_strategy import StaticFileChunkingStrategy as StaticFileChunkingStrategy from .eval_custom_data_source_config import EvalCustomDataSourceConfig as EvalCustomDataSourceConfig +from .image_edit_partial_image_event import ImageEditPartialImageEvent as ImageEditPartialImageEvent from .moderation_image_url_input_param import ModerationImageURLInputParam as ModerationImageURLInputParam from .auto_file_chunking_strategy_param import AutoFileChunkingStrategyParam as AutoFileChunkingStrategyParam from .moderation_multi_modal_input_param import ModerationMultiModalInputParam as ModerationMultiModalInputParam diff --git a/portkey_ai/_vendor/openai/types/audio/speech_create_params.py b/portkey_ai/_vendor/openai/types/audio/speech_create_params.py index 905ca5c3..feeb68c6 100644 --- a/portkey_ai/_vendor/openai/types/audio/speech_create_params.py +++ b/portkey_ai/_vendor/openai/types/audio/speech_create_params.py @@ -20,11 +20,7 @@ class SpeechCreateParams(TypedDict, total=False): `tts-1`, `tts-1-hd` or `gpt-4o-mini-tts`. """ - voice: Required[ - Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ] - ] + voice: Required[Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]]] """The voice to use when generating the audio. Supported voices are `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `onyx`, @@ -48,6 +44,12 @@ class SpeechCreateParams(TypedDict, total=False): speed: float """The speed of the generated audio. - Select a value from `0.25` to `4.0`. `1.0` is the default. Does not work with - `gpt-4o-mini-tts`. + Select a value from `0.25` to `4.0`. `1.0` is the default. + """ + + stream_format: Literal["sse", "audio"] + """The format to stream the audio in. + + Supported formats are `sse` and `audio`. `sse` is not supported for `tts-1` or + `tts-1-hd`. """ diff --git a/portkey_ai/_vendor/openai/types/audio/transcription.py b/portkey_ai/_vendor/openai/types/audio/transcription.py index 15763854..4c588215 100644 --- a/portkey_ai/_vendor/openai/types/audio/transcription.py +++ b/portkey_ai/_vendor/openai/types/audio/transcription.py @@ -1,10 +1,12 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List, Optional +from typing import List, Union, Optional +from typing_extensions import Literal, Annotated, TypeAlias +from ..._utils import PropertyInfo from ..._models import BaseModel -__all__ = ["Transcription", "Logprob"] +__all__ = ["Transcription", "Logprob", "Usage", "UsageTokens", "UsageTokensInputTokenDetails", "UsageDuration"] class Logprob(BaseModel): @@ -18,6 +20,42 @@ class Logprob(BaseModel): """The log probability of the token.""" +class UsageTokensInputTokenDetails(BaseModel): + audio_tokens: Optional[int] = None + """Number of audio tokens billed for this request.""" + + text_tokens: Optional[int] = None + """Number of text tokens billed for this request.""" + + +class UsageTokens(BaseModel): + input_tokens: int + """Number of input tokens billed for this request.""" + + output_tokens: int + """Number of output tokens generated.""" + + total_tokens: int + """Total number of tokens used (input + output).""" + + type: Literal["tokens"] + """The type of the usage object. Always `tokens` for this variant.""" + + input_token_details: Optional[UsageTokensInputTokenDetails] = None + """Details about the input tokens billed for this request.""" + + +class UsageDuration(BaseModel): + seconds: float + """Duration of the input audio in seconds.""" + + type: Literal["duration"] + """The type of the usage object. Always `duration` for this variant.""" + + +Usage: TypeAlias = Annotated[Union[UsageTokens, UsageDuration], PropertyInfo(discriminator="type")] + + class Transcription(BaseModel): text: str """The transcribed text.""" @@ -28,3 +66,6 @@ class Transcription(BaseModel): Only returned with the models `gpt-4o-transcribe` and `gpt-4o-mini-transcribe` if `logprobs` is added to the `include` array. """ + + usage: Optional[Usage] = None + """Token usage statistics for the request.""" diff --git a/portkey_ai/_vendor/openai/types/audio/transcription_text_done_event.py b/portkey_ai/_vendor/openai/types/audio/transcription_text_done_event.py index c8875a1b..9665edc5 100644 --- a/portkey_ai/_vendor/openai/types/audio/transcription_text_done_event.py +++ b/portkey_ai/_vendor/openai/types/audio/transcription_text_done_event.py @@ -5,7 +5,7 @@ from ..._models import BaseModel -__all__ = ["TranscriptionTextDoneEvent", "Logprob"] +__all__ = ["TranscriptionTextDoneEvent", "Logprob", "Usage", "UsageInputTokenDetails"] class Logprob(BaseModel): @@ -19,6 +19,31 @@ class Logprob(BaseModel): """The log probability of the token.""" +class UsageInputTokenDetails(BaseModel): + audio_tokens: Optional[int] = None + """Number of audio tokens billed for this request.""" + + text_tokens: Optional[int] = None + """Number of text tokens billed for this request.""" + + +class Usage(BaseModel): + input_tokens: int + """Number of input tokens billed for this request.""" + + output_tokens: int + """Number of output tokens generated.""" + + total_tokens: int + """Total number of tokens used (input + output).""" + + type: Literal["tokens"] + """The type of the usage object. Always `tokens` for this variant.""" + + input_token_details: Optional[UsageInputTokenDetails] = None + """Details about the input tokens billed for this request.""" + + class TranscriptionTextDoneEvent(BaseModel): text: str """The text that was transcribed.""" @@ -33,3 +58,6 @@ class TranscriptionTextDoneEvent(BaseModel): [create a transcription](https://platform.openai.com/docs/api-reference/audio/create-transcription) with the `include[]` parameter set to `logprobs`. """ + + usage: Optional[Usage] = None + """Usage statistics for models billed by token usage.""" diff --git a/portkey_ai/_vendor/openai/types/audio/transcription_verbose.py b/portkey_ai/_vendor/openai/types/audio/transcription_verbose.py index 2a670189..addda71e 100644 --- a/portkey_ai/_vendor/openai/types/audio/transcription_verbose.py +++ b/portkey_ai/_vendor/openai/types/audio/transcription_verbose.py @@ -1,12 +1,21 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from typing import List, Optional +from typing_extensions import Literal from ..._models import BaseModel from .transcription_word import TranscriptionWord from .transcription_segment import TranscriptionSegment -__all__ = ["TranscriptionVerbose"] +__all__ = ["TranscriptionVerbose", "Usage"] + + +class Usage(BaseModel): + seconds: float + """Duration of the input audio in seconds.""" + + type: Literal["duration"] + """The type of the usage object. Always `duration` for this variant.""" class TranscriptionVerbose(BaseModel): @@ -22,5 +31,8 @@ class TranscriptionVerbose(BaseModel): segments: Optional[List[TranscriptionSegment]] = None """Segments of the transcribed text and their corresponding details.""" + usage: Optional[Usage] = None + """Usage statistics for models billed by audio input duration.""" + words: Optional[List[TranscriptionWord]] = None """Extracted words and their corresponding timestamps.""" diff --git a/portkey_ai/_vendor/openai/types/beta/assistant_create_params.py b/portkey_ai/_vendor/openai/types/beta/assistant_create_params.py index 8b3c3318..4b03dc0e 100644 --- a/portkey_ai/_vendor/openai/types/beta/assistant_create_params.py +++ b/portkey_ai/_vendor/openai/types/beta/assistant_create_params.py @@ -58,12 +58,12 @@ class AssistantCreateParams(TypedDict, total=False): """The name of the assistant. The maximum length is 256 characters.""" reasoning_effort: Optional[ReasoningEffort] - """**o-series models only** - + """ Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. """ response_format: Optional[AssistantResponseFormatOptionParam] diff --git a/portkey_ai/_vendor/openai/types/beta/assistant_update_params.py b/portkey_ai/_vendor/openai/types/beta/assistant_update_params.py index b28094a6..e032554d 100644 --- a/portkey_ai/_vendor/openai/types/beta/assistant_update_params.py +++ b/portkey_ai/_vendor/openai/types/beta/assistant_update_params.py @@ -36,6 +36,12 @@ class AssistantUpdateParams(TypedDict, total=False): model: Union[ str, Literal[ + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5-2025-08-07", + "gpt-5-mini-2025-08-07", + "gpt-5-nano-2025-08-07", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", @@ -87,12 +93,12 @@ class AssistantUpdateParams(TypedDict, total=False): """The name of the assistant. The maximum length is 256 characters.""" reasoning_effort: Optional[ReasoningEffort] - """**o-series models only** - + """ Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. """ response_format: Optional[AssistantResponseFormatOptionParam] diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item.py index 4edf6c4d..21b7a8ac 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item.py @@ -50,8 +50,8 @@ class ConversationItem(BaseModel): for `message` items. """ - status: Optional[Literal["completed", "incomplete"]] = None - """The status of the item (`completed`, `incomplete`). + status: Optional[Literal["completed", "incomplete", "in_progress"]] = None + """The status of the item (`completed`, `incomplete`, `in_progress`). These have no effect on the conversation, but are accepted for consistency with the `conversation.item.created` event. diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content.py index ab40a4a1..fe9cef80 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content.py @@ -23,7 +23,10 @@ class ConversationItemContent(BaseModel): """The text content, used for `input_text` and `text` content types.""" transcript: Optional[str] = None - """The transcript of the audio, used for `input_audio` content type.""" + """The transcript of the audio, used for `input_audio` and `audio` content types.""" - type: Optional[Literal["input_text", "input_audio", "item_reference", "text"]] = None - """The content type (`input_text`, `input_audio`, `item_reference`, `text`).""" + type: Optional[Literal["input_text", "input_audio", "item_reference", "text", "audio"]] = None + """ + The content type (`input_text`, `input_audio`, `item_reference`, `text`, + `audio`). + """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content_param.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content_param.py index 7a3a92a3..6042e7f9 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content_param.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_content_param.py @@ -22,7 +22,10 @@ class ConversationItemContentParam(TypedDict, total=False): """The text content, used for `input_text` and `text` content types.""" transcript: str - """The transcript of the audio, used for `input_audio` content type.""" + """The transcript of the audio, used for `input_audio` and `audio` content types.""" - type: Literal["input_text", "input_audio", "item_reference", "text"] - """The content type (`input_text`, `input_audio`, `item_reference`, `text`).""" + type: Literal["input_text", "input_audio", "item_reference", "text", "audio"] + """ + The content type (`input_text`, `input_audio`, `item_reference`, `text`, + `audio`). + """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_created_event.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_created_event.py index 2f203882..aea7ad5b 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_created_event.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_created_event.py @@ -1,5 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +from typing import Optional from typing_extensions import Literal from ...._models import BaseModel @@ -15,11 +16,12 @@ class ConversationItemCreatedEvent(BaseModel): item: ConversationItem """The item to add to the conversation.""" - previous_item_id: str + type: Literal["conversation.item.created"] + """The event type, must be `conversation.item.created`.""" + + previous_item_id: Optional[str] = None """ The ID of the preceding item in the Conversation context, allows the client to - understand the order of the conversation. + understand the order of the conversation. Can be `null` if the item has no + predecessor. """ - - type: Literal["conversation.item.created"] - """The event type, must be `conversation.item.created`.""" diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.py index 46981169..e7c457d4 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_input_audio_transcription_completed_event.py @@ -1,11 +1,54 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List, Optional -from typing_extensions import Literal +from typing import List, Union, Optional +from typing_extensions import Literal, TypeAlias from ...._models import BaseModel -__all__ = ["ConversationItemInputAudioTranscriptionCompletedEvent", "Logprob"] +__all__ = [ + "ConversationItemInputAudioTranscriptionCompletedEvent", + "Usage", + "UsageTranscriptTextUsageTokens", + "UsageTranscriptTextUsageTokensInputTokenDetails", + "UsageTranscriptTextUsageDuration", + "Logprob", +] + + +class UsageTranscriptTextUsageTokensInputTokenDetails(BaseModel): + audio_tokens: Optional[int] = None + """Number of audio tokens billed for this request.""" + + text_tokens: Optional[int] = None + """Number of text tokens billed for this request.""" + + +class UsageTranscriptTextUsageTokens(BaseModel): + input_tokens: int + """Number of input tokens billed for this request.""" + + output_tokens: int + """Number of output tokens generated.""" + + total_tokens: int + """Total number of tokens used (input + output).""" + + type: Literal["tokens"] + """The type of the usage object. Always `tokens` for this variant.""" + + input_token_details: Optional[UsageTranscriptTextUsageTokensInputTokenDetails] = None + """Details about the input tokens billed for this request.""" + + +class UsageTranscriptTextUsageDuration(BaseModel): + seconds: float + """Duration of the input audio in seconds.""" + + type: Literal["duration"] + """The type of the usage object. Always `duration` for this variant.""" + + +Usage: TypeAlias = Union[UsageTranscriptTextUsageTokens, UsageTranscriptTextUsageDuration] class Logprob(BaseModel): @@ -37,5 +80,8 @@ class ConversationItemInputAudioTranscriptionCompletedEvent(BaseModel): The event type, must be `conversation.item.input_audio_transcription.completed`. """ + usage: Usage + """Usage statistics for the transcription.""" + logprobs: Optional[List[Logprob]] = None """The log probabilities of the transcription.""" diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_param.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_param.py index ac0f8431..8bbd539c 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_param.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_param.py @@ -51,8 +51,8 @@ class ConversationItemParam(TypedDict, total=False): for `message` items. """ - status: Literal["completed", "incomplete"] - """The status of the item (`completed`, `incomplete`). + status: Literal["completed", "incomplete", "in_progress"] + """The status of the item (`completed`, `incomplete`, `in_progress`). These have no effect on the conversation, but are accepted for consistency with the `conversation.item.created` event. diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference.py index 31806afc..0edcfc76 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference.py @@ -4,9 +4,29 @@ from typing_extensions import Literal from ...._models import BaseModel -from .conversation_item_content import ConversationItemContent -__all__ = ["ConversationItemWithReference"] +__all__ = ["ConversationItemWithReference", "Content"] + + +class Content(BaseModel): + id: Optional[str] = None + """ + ID of a previous conversation item to reference (for `item_reference` content + types in `response.create` events). These can reference both client and server + created items. + """ + + audio: Optional[str] = None + """Base64-encoded audio bytes, used for `input_audio` content type.""" + + text: Optional[str] = None + """The text content, used for `input_text` and `text` content types.""" + + transcript: Optional[str] = None + """The transcript of the audio, used for `input_audio` content type.""" + + type: Optional[Literal["input_text", "input_audio", "item_reference", "text"]] = None + """The content type (`input_text`, `input_audio`, `item_reference`, `text`).""" class ConversationItemWithReference(BaseModel): @@ -30,7 +50,7 @@ class ConversationItemWithReference(BaseModel): `function_call` item with the same ID exists in the conversation history. """ - content: Optional[List[ConversationItemContent]] = None + content: Optional[List[Content]] = None """The content of the message, applicable for `message` items. - Message items of role `system` support only `input_text` content @@ -53,8 +73,8 @@ class ConversationItemWithReference(BaseModel): for `message` items. """ - status: Optional[Literal["completed", "incomplete"]] = None - """The status of the item (`completed`, `incomplete`). + status: Optional[Literal["completed", "incomplete", "in_progress"]] = None + """The status of the item (`completed`, `incomplete`, `in_progress`). These have no effect on the conversation, but are accepted for consistency with the `conversation.item.created` event. diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference_param.py b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference_param.py index e266cdce..c83dc92a 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference_param.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/conversation_item_with_reference_param.py @@ -5,9 +5,28 @@ from typing import Iterable from typing_extensions import Literal, TypedDict -from .conversation_item_content_param import ConversationItemContentParam +__all__ = ["ConversationItemWithReferenceParam", "Content"] -__all__ = ["ConversationItemWithReferenceParam"] + +class Content(TypedDict, total=False): + id: str + """ + ID of a previous conversation item to reference (for `item_reference` content + types in `response.create` events). These can reference both client and server + created items. + """ + + audio: str + """Base64-encoded audio bytes, used for `input_audio` content type.""" + + text: str + """The text content, used for `input_text` and `text` content types.""" + + transcript: str + """The transcript of the audio, used for `input_audio` content type.""" + + type: Literal["input_text", "input_audio", "item_reference", "text"] + """The content type (`input_text`, `input_audio`, `item_reference`, `text`).""" class ConversationItemWithReferenceParam(TypedDict, total=False): @@ -31,7 +50,7 @@ class ConversationItemWithReferenceParam(TypedDict, total=False): `function_call` item with the same ID exists in the conversation history. """ - content: Iterable[ConversationItemContentParam] + content: Iterable[Content] """The content of the message, applicable for `message` items. - Message items of role `system` support only `input_text` content @@ -54,8 +73,8 @@ class ConversationItemWithReferenceParam(TypedDict, total=False): for `message` items. """ - status: Literal["completed", "incomplete"] - """The status of the item (`completed`, `incomplete`). + status: Literal["completed", "incomplete", "in_progress"] + """The status of the item (`completed`, `incomplete`, `in_progress`). These have no effect on the conversation, but are accepted for consistency with the `conversation.item.created` event. diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/input_audio_buffer_committed_event.py b/portkey_ai/_vendor/openai/types/beta/realtime/input_audio_buffer_committed_event.py index 3071eff3..22eb53b1 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/input_audio_buffer_committed_event.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/input_audio_buffer_committed_event.py @@ -1,5 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +from typing import Optional from typing_extensions import Literal from ...._models import BaseModel @@ -14,8 +15,11 @@ class InputAudioBufferCommittedEvent(BaseModel): item_id: str """The ID of the user message item that will be created.""" - previous_item_id: str - """The ID of the preceding item after which the new item will be inserted.""" - type: Literal["input_audio_buffer.committed"] """The event type, must be `input_audio_buffer.committed`.""" + + previous_item_id: Optional[str] = None + """ + The ID of the preceding item after which the new item will be inserted. Can be + `null` if the item has no predecessor. + """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/realtime_response.py b/portkey_ai/_vendor/openai/types/beta/realtime/realtime_response.py index 8ecfb91c..ccc97c5d 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/realtime_response.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/realtime_response.py @@ -60,10 +60,10 @@ class RealtimeResponse(BaseModel): output_audio_format: Optional[Literal["pcm16", "g711_ulaw", "g711_alaw"]] = None """The format of output audio. Options are `pcm16`, `g711_ulaw`, or `g711_alaw`.""" - status: Optional[Literal["completed", "cancelled", "failed", "incomplete"]] = None + status: Optional[Literal["completed", "cancelled", "failed", "incomplete", "in_progress"]] = None """ The final status of the response (`completed`, `cancelled`, `failed`, or - `incomplete`). + `incomplete`, `in_progress`). """ status_details: Optional[RealtimeResponseStatus] = None @@ -80,13 +80,8 @@ class RealtimeResponse(BaseModel): will become the input for later turns. """ - voice: Union[ - str, - Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"], - None, - ] = None + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"], None] = None """ The voice the model used to respond. Current voice options are `alloy`, `ash`, - `ballad`, `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, and - `verse`. + `ballad`, `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event.py b/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event.py index 3b8a6de8..7219cedb 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event.py @@ -101,16 +101,12 @@ class Response(BaseModel): tools: Optional[List[ResponseTool]] = None """Tools (functions) available to the model.""" - voice: Union[ - str, - Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"], - None, - ] = None + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"], None] = None """The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are `alloy`, `ash`, `ballad`, - `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, and `verse`. + `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event_param.py b/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event_param.py index c569d507..b4d54bba 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event_param.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/response_create_event_param.py @@ -102,14 +102,12 @@ class Response(TypedDict, total=False): tools: Iterable[ResponseTool] """Tools (functions) available to the model.""" - voice: Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ] + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]] """The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are `alloy`, `ash`, `ballad`, - `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, and `verse`. + `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/session.py b/portkey_ai/_vendor/openai/types/beta/realtime/session.py index 606fd838..f84b3ee4 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/session.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/session.py @@ -268,14 +268,10 @@ class Session(BaseModel): natural conversations, but may have a higher latency. """ - voice: Union[ - str, - Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"], - None, - ] = None + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"], None] = None """The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are `alloy`, `ash`, `ballad`, - `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, and `verse`. + `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/session_create_params.py b/portkey_ai/_vendor/openai/types/beta/realtime/session_create_params.py index cebf67c7..6be09d8b 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/session_create_params.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/session_create_params.py @@ -3,12 +3,12 @@ from __future__ import annotations from typing import List, Union, Iterable -from typing_extensions import Literal, TypeAlias, TypedDict +from typing_extensions import Literal, Required, TypeAlias, TypedDict __all__ = [ "SessionCreateParams", "ClientSecret", - "ClientSecretExpiresAt", + "ClientSecretExpiresAfter", "InputAudioNoiseReduction", "InputAudioTranscription", "Tool", @@ -145,19 +145,17 @@ class SessionCreateParams(TypedDict, total=False): natural conversations, but may have a higher latency. """ - voice: Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ] + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]] """The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are `alloy`, `ash`, `ballad`, - `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, and `verse`. + `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ -class ClientSecretExpiresAt(TypedDict, total=False): - anchor: Literal["created_at"] +class ClientSecretExpiresAfter(TypedDict, total=False): + anchor: Required[Literal["created_at"]] """The anchor point for the ephemeral token expiration. Only `created_at` is currently supported. @@ -171,7 +169,7 @@ class ClientSecretExpiresAt(TypedDict, total=False): class ClientSecret(TypedDict, total=False): - expires_at: ClientSecretExpiresAt + expires_after: ClientSecretExpiresAfter """Configuration for the ephemeral token expiration.""" diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/session_create_response.py b/portkey_ai/_vendor/openai/types/beta/realtime/session_create_response.py index 81fed95f..471da036 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/session_create_response.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/session_create_response.py @@ -33,10 +33,7 @@ class ClientSecret(BaseModel): class InputAudioTranscription(BaseModel): model: Optional[str] = None - """ - The model to use for transcription, `whisper-1` is the only currently supported - model. - """ + """The model to use for transcription.""" class Tool(BaseModel): @@ -116,8 +113,8 @@ class SessionCreateResponse(BaseModel): Configuration for input audio transcription, defaults to off and can be set to `null` to turn off once on. Input audio transcription is not native to the model, since the model consumes audio directly. Transcription runs - asynchronously through Whisper and should be treated as rough guidance rather - than the representation understood by the model. + asynchronously and should be treated as rough guidance rather than the + representation understood by the model. """ instructions: Optional[str] = None @@ -190,14 +187,10 @@ class SessionCreateResponse(BaseModel): speech. """ - voice: Union[ - str, - Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"], - None, - ] = None + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"], None] = None """The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are `alloy`, `ash`, `ballad`, - `coral`, `echo` `sage`, `shimmer` and `verse`. + `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event.py b/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event.py index 8bb6a0e2..5b4185db 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event.py @@ -9,7 +9,7 @@ "SessionUpdateEvent", "Session", "SessionClientSecret", - "SessionClientSecretExpiresAt", + "SessionClientSecretExpiresAfter", "SessionInputAudioNoiseReduction", "SessionInputAudioTranscription", "SessionTool", @@ -19,8 +19,8 @@ ] -class SessionClientSecretExpiresAt(BaseModel): - anchor: Optional[Literal["created_at"]] = None +class SessionClientSecretExpiresAfter(BaseModel): + anchor: Literal["created_at"] """The anchor point for the ephemeral token expiration. Only `created_at` is currently supported. @@ -34,7 +34,7 @@ class SessionClientSecretExpiresAt(BaseModel): class SessionClientSecret(BaseModel): - expires_at: Optional[SessionClientSecretExpiresAt] = None + expires_after: Optional[SessionClientSecretExpiresAfter] = None """Configuration for the ephemeral token expiration.""" @@ -290,16 +290,12 @@ class Session(BaseModel): natural conversations, but may have a higher latency. """ - voice: Union[ - str, - Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"], - None, - ] = None + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"], None] = None """The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are `alloy`, `ash`, `ballad`, - `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, and `verse`. + `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ diff --git a/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event_param.py b/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event_param.py index a10de540..3063449b 100644 --- a/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event_param.py +++ b/portkey_ai/_vendor/openai/types/beta/realtime/session_update_event_param.py @@ -9,7 +9,7 @@ "SessionUpdateEventParam", "Session", "SessionClientSecret", - "SessionClientSecretExpiresAt", + "SessionClientSecretExpiresAfter", "SessionInputAudioNoiseReduction", "SessionInputAudioTranscription", "SessionTool", @@ -19,8 +19,8 @@ ] -class SessionClientSecretExpiresAt(TypedDict, total=False): - anchor: Literal["created_at"] +class SessionClientSecretExpiresAfter(TypedDict, total=False): + anchor: Required[Literal["created_at"]] """The anchor point for the ephemeral token expiration. Only `created_at` is currently supported. @@ -34,7 +34,7 @@ class SessionClientSecretExpiresAt(TypedDict, total=False): class SessionClientSecret(TypedDict, total=False): - expires_at: SessionClientSecretExpiresAt + expires_after: SessionClientSecretExpiresAfter """Configuration for the ephemeral token expiration.""" @@ -288,14 +288,12 @@ class Session(TypedDict, total=False): natural conversations, but may have a higher latency. """ - voice: Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ] + voice: Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]] """The voice the model uses to respond. Voice cannot be changed during the session once the model has responded with audio at least once. Current voice options are `alloy`, `ash`, `ballad`, - `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, and `verse`. + `coral`, `echo`, `sage`, `shimmer`, and `verse`. """ diff --git a/portkey_ai/_vendor/openai/types/beta/threads/run_create_params.py b/portkey_ai/_vendor/openai/types/beta/threads/run_create_params.py index fc702278..f9defcb1 100644 --- a/portkey_ai/_vendor/openai/types/beta/threads/run_create_params.py +++ b/portkey_ai/_vendor/openai/types/beta/threads/run_create_params.py @@ -108,12 +108,12 @@ class RunCreateParamsBase(TypedDict, total=False): """ reasoning_effort: Optional[ReasoningEffort] - """**o-series models only** - + """ Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. """ response_format: Optional[AssistantResponseFormatOptionParam] diff --git a/portkey_ai/_vendor/openai/types/chat/__init__.py b/portkey_ai/_vendor/openai/types/chat/__init__.py index 0945bcad..c9e77ff4 100644 --- a/portkey_ai/_vendor/openai/types/chat/__init__.py +++ b/portkey_ai/_vendor/openai/types/chat/__init__.py @@ -4,7 +4,6 @@ from .chat_completion import ChatCompletion as ChatCompletion from .chat_completion_role import ChatCompletionRole as ChatCompletionRole -from .chat_completion_tool import ChatCompletionTool as ChatCompletionTool from .chat_completion_audio import ChatCompletionAudio as ChatCompletionAudio from .chat_completion_chunk import ChatCompletionChunk as ChatCompletionChunk from .completion_list_params import CompletionListParams as CompletionListParams @@ -24,14 +23,21 @@ ) from .chat_completion_tool_param import ChatCompletionToolParam as ChatCompletionToolParam from .chat_completion_audio_param import ChatCompletionAudioParam as ChatCompletionAudioParam +from .chat_completion_function_tool import ChatCompletionFunctionTool as ChatCompletionFunctionTool from .chat_completion_message_param import ChatCompletionMessageParam as ChatCompletionMessageParam from .chat_completion_store_message import ChatCompletionStoreMessage as ChatCompletionStoreMessage from .chat_completion_token_logprob import ChatCompletionTokenLogprob as ChatCompletionTokenLogprob from .chat_completion_reasoning_effort import ChatCompletionReasoningEffort as ChatCompletionReasoningEffort +from .chat_completion_tool_union_param import ChatCompletionToolUnionParam as ChatCompletionToolUnionParam +from .chat_completion_content_part_text import ChatCompletionContentPartText as ChatCompletionContentPartText +from .chat_completion_custom_tool_param import ChatCompletionCustomToolParam as ChatCompletionCustomToolParam from .chat_completion_message_tool_call import ChatCompletionMessageToolCall as ChatCompletionMessageToolCall +from .chat_completion_content_part_image import ChatCompletionContentPartImage as ChatCompletionContentPartImage from .chat_completion_content_part_param import ChatCompletionContentPartParam as ChatCompletionContentPartParam from .chat_completion_tool_message_param import ChatCompletionToolMessageParam as ChatCompletionToolMessageParam from .chat_completion_user_message_param import ChatCompletionUserMessageParam as ChatCompletionUserMessageParam +from .chat_completion_allowed_tools_param import ChatCompletionAllowedToolsParam as ChatCompletionAllowedToolsParam +from .chat_completion_function_tool_param import ChatCompletionFunctionToolParam as ChatCompletionFunctionToolParam from .chat_completion_stream_options_param import ChatCompletionStreamOptionsParam as ChatCompletionStreamOptionsParam from .chat_completion_system_message_param import ChatCompletionSystemMessageParam as ChatCompletionSystemMessageParam from .chat_completion_function_message_param import ( @@ -55,18 +61,36 @@ from .chat_completion_content_part_image_param import ( ChatCompletionContentPartImageParam as ChatCompletionContentPartImageParam, ) +from .chat_completion_message_custom_tool_call import ( + ChatCompletionMessageCustomToolCall as ChatCompletionMessageCustomToolCall, +) from .chat_completion_prediction_content_param import ( ChatCompletionPredictionContentParam as ChatCompletionPredictionContentParam, ) from .chat_completion_tool_choice_option_param import ( ChatCompletionToolChoiceOptionParam as ChatCompletionToolChoiceOptionParam, ) +from .chat_completion_allowed_tool_choice_param import ( + ChatCompletionAllowedToolChoiceParam as ChatCompletionAllowedToolChoiceParam, +) from .chat_completion_content_part_refusal_param import ( ChatCompletionContentPartRefusalParam as ChatCompletionContentPartRefusalParam, ) from .chat_completion_function_call_option_param import ( ChatCompletionFunctionCallOptionParam as ChatCompletionFunctionCallOptionParam, ) +from .chat_completion_message_function_tool_call import ( + ChatCompletionMessageFunctionToolCall as ChatCompletionMessageFunctionToolCall, +) from .chat_completion_content_part_input_audio_param import ( ChatCompletionContentPartInputAudioParam as ChatCompletionContentPartInputAudioParam, ) +from .chat_completion_message_custom_tool_call_param import ( + ChatCompletionMessageCustomToolCallParam as ChatCompletionMessageCustomToolCallParam, +) +from .chat_completion_named_tool_choice_custom_param import ( + ChatCompletionNamedToolChoiceCustomParam as ChatCompletionNamedToolChoiceCustomParam, +) +from .chat_completion_message_function_tool_call_param import ( + ChatCompletionMessageFunctionToolCallParam as ChatCompletionMessageFunctionToolCallParam, +) diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion.py b/portkey_ai/_vendor/openai/types/chat/chat_completion.py index 49af1a3d..42463f7e 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion.py @@ -59,25 +59,24 @@ class ChatCompletion(BaseModel): object: Literal["chat.completion"] """The object type, which is always `chat.completion`.""" - service_tier: Optional[Literal["auto", "default", "flex"]] = None - """Specifies the latency tier to use for processing the request. - - This parameter is relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] = None + """Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. """ system_fingerprint: Optional[str] = None diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tool_choice_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tool_choice_param.py new file mode 100644 index 00000000..813e6293 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tool_choice_param.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +from .chat_completion_allowed_tools_param import ChatCompletionAllowedToolsParam + +__all__ = ["ChatCompletionAllowedToolChoiceParam"] + + +class ChatCompletionAllowedToolChoiceParam(TypedDict, total=False): + allowed_tools: Required[ChatCompletionAllowedToolsParam] + """Constrains the tools available to the model to a pre-defined set.""" + + type: Required[Literal["allowed_tools"]] + """Allowed tool configuration type. Always `allowed_tools`.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tools_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tools_param.py new file mode 100644 index 00000000..d9b72d8f --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_allowed_tools_param.py @@ -0,0 +1,32 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ChatCompletionAllowedToolsParam"] + + +class ChatCompletionAllowedToolsParam(TypedDict, total=False): + mode: Required[Literal["auto", "required"]] + """Constrains the tools available to the model to a pre-defined set. + + `auto` allows the model to pick from among the allowed tools and generate a + message. + + `required` requires the model to call one or more of the allowed tools. + """ + + tools: Required[Iterable[Dict[str, object]]] + """A list of tool definitions that the model should be allowed to call. + + For the Chat Completions API, the list of tool definitions might look like: + + ```json + [ + { "type": "function", "function": { "name": "get_weather" } }, + { "type": "function", "function": { "name": "get_time" } } + ] + ``` + """ diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_audio_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_audio_param.py index 25caada1..dc68159c 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_audio_param.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_audio_param.py @@ -15,11 +15,7 @@ class ChatCompletionAudioParam(TypedDict, total=False): Must be one of `wav`, `mp3`, `flac`, `opus`, or `pcm16`. """ - voice: Required[ - Union[ - str, Literal["alloy", "ash", "ballad", "coral", "echo", "fable", "onyx", "nova", "sage", "shimmer", "verse"] - ] - ] + voice: Required[Union[str, Literal["alloy", "ash", "ballad", "coral", "echo", "sage", "shimmer", "verse"]]] """The voice the model uses to respond. Supported voices are `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_chunk.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_chunk.py index c109e10f..082bb6cc 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_chunk.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_chunk.py @@ -128,25 +128,24 @@ class ChatCompletionChunk(BaseModel): object: Literal["chat.completion.chunk"] """The object type, which is always `chat.completion.chunk`.""" - service_tier: Optional[Literal["auto", "default", "flex"]] = None - """Specifies the latency tier to use for processing the request. - - This parameter is relevant for customers subscribed to the scale tier service: - - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] = None + """Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. """ system_fingerprint: Optional[str] = None diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_image.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_image.py new file mode 100644 index 00000000..c1386b9d --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_image.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ChatCompletionContentPartImage", "ImageURL"] + + +class ImageURL(BaseModel): + url: str + """Either a URL of the image or the base64 encoded image data.""" + + detail: Optional[Literal["auto", "low", "high"]] = None + """Specifies the detail level of the image. + + Learn more in the + [Vision guide](https://platform.openai.com/docs/guides/vision#low-or-high-fidelity-image-understanding). + """ + + +class ChatCompletionContentPartImage(BaseModel): + image_url: ImageURL + + type: Literal["image_url"] + """The type of the content part.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_text.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_text.py new file mode 100644 index 00000000..f09f35f7 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_content_part_text.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ChatCompletionContentPartText"] + + +class ChatCompletionContentPartText(BaseModel): + text: str + """The text content.""" + + type: Literal["text"] + """The type of the content part.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_custom_tool_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_custom_tool_param.py new file mode 100644 index 00000000..14959ee4 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_custom_tool_param.py @@ -0,0 +1,58 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypeAlias, TypedDict + +__all__ = [ + "ChatCompletionCustomToolParam", + "Custom", + "CustomFormat", + "CustomFormatText", + "CustomFormatGrammar", + "CustomFormatGrammarGrammar", +] + + +class CustomFormatText(TypedDict, total=False): + type: Required[Literal["text"]] + """Unconstrained text format. Always `text`.""" + + +class CustomFormatGrammarGrammar(TypedDict, total=False): + definition: Required[str] + """The grammar definition.""" + + syntax: Required[Literal["lark", "regex"]] + """The syntax of the grammar definition. One of `lark` or `regex`.""" + + +class CustomFormatGrammar(TypedDict, total=False): + grammar: Required[CustomFormatGrammarGrammar] + """Your chosen grammar.""" + + type: Required[Literal["grammar"]] + """Grammar format. Always `grammar`.""" + + +CustomFormat: TypeAlias = Union[CustomFormatText, CustomFormatGrammar] + + +class Custom(TypedDict, total=False): + name: Required[str] + """The name of the custom tool, used to identify it in tool calls.""" + + description: str + """Optional description of the custom tool, used to provide more context.""" + + format: CustomFormat + """The input format for the custom tool. Default is unconstrained text.""" + + +class ChatCompletionCustomToolParam(TypedDict, total=False): + custom: Required[Custom] + """Properties of the custom tool.""" + + type: Required[Literal["custom"]] + """The type of the custom tool. Always `custom`.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_tool.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_function_tool.py similarity index 80% rename from portkey_ai/_vendor/openai/types/chat/chat_completion_tool.py rename to portkey_ai/_vendor/openai/types/chat/chat_completion_function_tool.py index ae9126f9..641568ac 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_tool.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_function_tool.py @@ -5,10 +5,10 @@ from ..._models import BaseModel from ..shared.function_definition import FunctionDefinition -__all__ = ["ChatCompletionTool"] +__all__ = ["ChatCompletionFunctionTool"] -class ChatCompletionTool(BaseModel): +class ChatCompletionFunctionTool(BaseModel): function: FunctionDefinition type: Literal["function"] diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_function_tool_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_function_tool_param.py new file mode 100644 index 00000000..a39feea5 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_function_tool_param.py @@ -0,0 +1,16 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +from ..shared_params.function_definition import FunctionDefinition + +__all__ = ["ChatCompletionFunctionToolParam"] + + +class ChatCompletionFunctionToolParam(TypedDict, total=False): + function: Required[FunctionDefinition] + + type: Required[Literal["function"]] + """The type of the tool. Currently, only `function` is supported.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call.py new file mode 100644 index 00000000..b13c176a --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call.py @@ -0,0 +1,26 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ChatCompletionMessageCustomToolCall", "Custom"] + + +class Custom(BaseModel): + input: str + """The input for the custom tool call generated by the model.""" + + name: str + """The name of the custom tool to call.""" + + +class ChatCompletionMessageCustomToolCall(BaseModel): + id: str + """The ID of the tool call.""" + + custom: Custom + """The custom tool that the model called.""" + + type: Literal["custom"] + """The type of the tool. Always `custom`.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call_param.py new file mode 100644 index 00000000..3753e0f2 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_custom_tool_call_param.py @@ -0,0 +1,26 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ChatCompletionMessageCustomToolCallParam", "Custom"] + + +class Custom(TypedDict, total=False): + input: Required[str] + """The input for the custom tool call generated by the model.""" + + name: Required[str] + """The name of the custom tool to call.""" + + +class ChatCompletionMessageCustomToolCallParam(TypedDict, total=False): + id: Required[str] + """The ID of the tool call.""" + + custom: Required[Custom] + """The custom tool that the model called.""" + + type: Required[Literal["custom"]] + """The type of the tool. Always `custom`.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call.py new file mode 100644 index 00000000..d056d9af --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call.py @@ -0,0 +1,31 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ChatCompletionMessageFunctionToolCall", "Function"] + + +class Function(BaseModel): + arguments: str + """ + The arguments to call the function with, as generated by the model in JSON + format. Note that the model does not always generate valid JSON, and may + hallucinate parameters not defined by your function schema. Validate the + arguments in your code before calling your function. + """ + + name: str + """The name of the function to call.""" + + +class ChatCompletionMessageFunctionToolCall(BaseModel): + id: str + """The ID of the tool call.""" + + function: Function + """The function that the model called.""" + + type: Literal["function"] + """The type of the tool. Currently, only `function` is supported.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call_param.py new file mode 100644 index 00000000..7c827edd --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_function_tool_call_param.py @@ -0,0 +1,31 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ChatCompletionMessageFunctionToolCallParam", "Function"] + + +class Function(TypedDict, total=False): + arguments: Required[str] + """ + The arguments to call the function with, as generated by the model in JSON + format. Note that the model does not always generate valid JSON, and may + hallucinate parameters not defined by your function schema. Validate the + arguments in your code before calling your function. + """ + + name: Required[str] + """The name of the function to call.""" + + +class ChatCompletionMessageFunctionToolCallParam(TypedDict, total=False): + id: Required[str] + """The ID of the tool call.""" + + function: Required[Function] + """The function that the model called.""" + + type: Required[Literal["function"]] + """The type of the tool. Currently, only `function` is supported.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call.py index 4fec6670..94cc086e 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call.py @@ -1,31 +1,15 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing_extensions import Literal +from typing import Union +from typing_extensions import Annotated, TypeAlias -from ..._models import BaseModel +from ..._utils import PropertyInfo +from .chat_completion_message_custom_tool_call import ChatCompletionMessageCustomToolCall +from .chat_completion_message_function_tool_call import Function as Function, ChatCompletionMessageFunctionToolCall __all__ = ["ChatCompletionMessageToolCall", "Function"] - -class Function(BaseModel): - arguments: str - """ - The arguments to call the function with, as generated by the model in JSON - format. Note that the model does not always generate valid JSON, and may - hallucinate parameters not defined by your function schema. Validate the - arguments in your code before calling your function. - """ - - name: str - """The name of the function to call.""" - - -class ChatCompletionMessageToolCall(BaseModel): - id: str - """The ID of the tool call.""" - - function: Function - """The function that the model called.""" - - type: Literal["function"] - """The type of the tool. Currently, only `function` is supported.""" +ChatCompletionMessageToolCall: TypeAlias = Annotated[ + Union[ChatCompletionMessageFunctionToolCall, ChatCompletionMessageCustomToolCall], + PropertyInfo(discriminator="type"), +] diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call_param.py index f616c363..96ba6521 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call_param.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_message_tool_call_param.py @@ -2,30 +2,14 @@ from __future__ import annotations -from typing_extensions import Literal, Required, TypedDict +from typing import Union +from typing_extensions import TypeAlias -__all__ = ["ChatCompletionMessageToolCallParam", "Function"] +from .chat_completion_message_custom_tool_call_param import ChatCompletionMessageCustomToolCallParam +from .chat_completion_message_function_tool_call_param import ChatCompletionMessageFunctionToolCallParam +__all__ = ["ChatCompletionMessageToolCallParam"] -class Function(TypedDict, total=False): - arguments: Required[str] - """ - The arguments to call the function with, as generated by the model in JSON - format. Note that the model does not always generate valid JSON, and may - hallucinate parameters not defined by your function schema. Validate the - arguments in your code before calling your function. - """ - - name: Required[str] - """The name of the function to call.""" - - -class ChatCompletionMessageToolCallParam(TypedDict, total=False): - id: Required[str] - """The ID of the tool call.""" - - function: Required[Function] - """The function that the model called.""" - - type: Required[Literal["function"]] - """The type of the tool. Currently, only `function` is supported.""" +ChatCompletionMessageToolCallParam: TypeAlias = Union[ + ChatCompletionMessageFunctionToolCallParam, ChatCompletionMessageCustomToolCallParam +] diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_custom_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_custom_param.py new file mode 100644 index 00000000..1c123c0a --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_custom_param.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ChatCompletionNamedToolChoiceCustomParam", "Custom"] + + +class Custom(TypedDict, total=False): + name: Required[str] + """The name of the custom tool to call.""" + + +class ChatCompletionNamedToolChoiceCustomParam(TypedDict, total=False): + custom: Required[Custom] + + type: Required[Literal["custom"]] + """For custom tool calling, the type is always `custom`.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_param.py index 369f8b42..ae1acfb9 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_param.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_named_tool_choice_param.py @@ -16,4 +16,4 @@ class ChatCompletionNamedToolChoiceParam(TypedDict, total=False): function: Required[Function] type: Required[Literal["function"]] - """The type of the tool. Currently, only `function` is supported.""" + """For function calling, the type is always `function`.""" diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_store_message.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_store_message.py index 8dc093f7..66134271 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_store_message.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_store_message.py @@ -1,10 +1,23 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +from typing import List, Union, Optional +from typing_extensions import TypeAlias + from .chat_completion_message import ChatCompletionMessage +from .chat_completion_content_part_text import ChatCompletionContentPartText +from .chat_completion_content_part_image import ChatCompletionContentPartImage + +__all__ = ["ChatCompletionStoreMessage", "ChatCompletionStoreMessageContentPart"] -__all__ = ["ChatCompletionStoreMessage"] +ChatCompletionStoreMessageContentPart: TypeAlias = Union[ChatCompletionContentPartText, ChatCompletionContentPartImage] class ChatCompletionStoreMessage(ChatCompletionMessage): id: str """The identifier of the chat message.""" + + content_parts: Optional[List[ChatCompletionStoreMessageContentPart]] = None + """ + If a content parts array was provided, this is an array of `text` and + `image_url` parts. Otherwise, null. + """ diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_stream_options_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_stream_options_param.py index 471e0eba..fc3191d2 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_stream_options_param.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_stream_options_param.py @@ -8,6 +8,17 @@ class ChatCompletionStreamOptionsParam(TypedDict, total=False): + include_obfuscation: bool + """When true, stream obfuscation will be enabled. + + Stream obfuscation adds random characters to an `obfuscation` field on streaming + delta events to normalize payload sizes as a mitigation to certain side-channel + attacks. These obfuscation fields are included by default, but add a small + amount of overhead to the data stream. You can set `include_obfuscation` to + false to optimize for bandwidth if you trust the network links between your + application and the OpenAI API. + """ + include_usage: bool """If set, an additional chunk will be streamed before the `data: [DONE]` message. diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_choice_option_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_choice_option_param.py index 7dedf041..f3bb0a46 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_choice_option_param.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_choice_option_param.py @@ -6,9 +6,14 @@ from typing_extensions import Literal, TypeAlias from .chat_completion_named_tool_choice_param import ChatCompletionNamedToolChoiceParam +from .chat_completion_allowed_tool_choice_param import ChatCompletionAllowedToolChoiceParam +from .chat_completion_named_tool_choice_custom_param import ChatCompletionNamedToolChoiceCustomParam __all__ = ["ChatCompletionToolChoiceOptionParam"] ChatCompletionToolChoiceOptionParam: TypeAlias = Union[ - Literal["none", "auto", "required"], ChatCompletionNamedToolChoiceParam + Literal["none", "auto", "required"], + ChatCompletionAllowedToolChoiceParam, + ChatCompletionNamedToolChoiceParam, + ChatCompletionNamedToolChoiceCustomParam, ] diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_param.py index 6c2b1a36..a18b13b4 100644 --- a/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_param.py +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_param.py @@ -2,15 +2,13 @@ from __future__ import annotations -from typing_extensions import Literal, Required, TypedDict +from typing_extensions import TypeAlias -from ..shared_params.function_definition import FunctionDefinition +from .chat_completion_function_tool_param import ( + FunctionDefinition as FunctionDefinition, + ChatCompletionFunctionToolParam, +) -__all__ = ["ChatCompletionToolParam"] +__all__ = ["ChatCompletionToolParam", "FunctionDefinition"] - -class ChatCompletionToolParam(TypedDict, total=False): - function: Required[FunctionDefinition] - - type: Required[Literal["function"]] - """The type of the tool. Currently, only `function` is supported.""" +ChatCompletionToolParam: TypeAlias = ChatCompletionFunctionToolParam diff --git a/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_union_param.py b/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_union_param.py new file mode 100644 index 00000000..0f8bf7b0 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/chat/chat_completion_tool_union_param.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import TypeAlias + +from .chat_completion_custom_tool_param import ChatCompletionCustomToolParam +from .chat_completion_function_tool_param import ChatCompletionFunctionToolParam + +__all__ = ["ChatCompletionToolUnionParam"] + +ChatCompletionToolUnionParam: TypeAlias = Union[ChatCompletionFunctionToolParam, ChatCompletionCustomToolParam] diff --git a/portkey_ai/_vendor/openai/types/chat/completion_create_params.py b/portkey_ai/_vendor/openai/types/chat/completion_create_params.py index e55cc2d0..a3bc90b0 100644 --- a/portkey_ai/_vendor/openai/types/chat/completion_create_params.py +++ b/portkey_ai/_vendor/openai/types/chat/completion_create_params.py @@ -8,9 +8,9 @@ from ..shared.chat_model import ChatModel from ..shared_params.metadata import Metadata from ..shared.reasoning_effort import ReasoningEffort -from .chat_completion_tool_param import ChatCompletionToolParam from .chat_completion_audio_param import ChatCompletionAudioParam from .chat_completion_message_param import ChatCompletionMessageParam +from .chat_completion_tool_union_param import ChatCompletionToolUnionParam from ..shared_params.function_parameters import FunctionParameters from ..shared_params.response_format_text import ResponseFormatText from .chat_completion_stream_options_param import ChatCompletionStreamOptionsParam @@ -177,13 +177,20 @@ class CompletionCreateParamsBase(TypedDict, total=False): far, increasing the model's likelihood to talk about new topics. """ - reasoning_effort: Optional[ReasoningEffort] - """**o-series models only** + prompt_cache_key: str + """ + Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + """ + reasoning_effort: Optional[ReasoningEffort] + """ Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. """ response_format: ResponseFormat @@ -199,6 +206,15 @@ class CompletionCreateParamsBase(TypedDict, total=False): preferred for models that support it. """ + safety_identifier: str + """ + A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + """ + seed: Optional[int] """ This feature is in Beta. If specified, our system will make a best effort to @@ -208,25 +224,24 @@ class CompletionCreateParamsBase(TypedDict, total=False): in the backend. """ - service_tier: Optional[Literal["auto", "default", "flex"]] - """Specifies the latency tier to use for processing the request. - - This parameter is relevant for customers subscribed to the scale tier service: + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] + """Specifies the processing type used for serving the request. - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. """ stop: Union[Optional[str], List[str], None] @@ -241,6 +256,8 @@ class CompletionCreateParamsBase(TypedDict, total=False): Whether or not to store the output of this chat completion request for use in our [model distillation](https://platform.openai.com/docs/guides/distillation) or [evals](https://platform.openai.com/docs/guides/evals) products. + + Supports text and image inputs. Note: image inputs over 10MB will be dropped. """ stream_options: Optional[ChatCompletionStreamOptionsParam] @@ -267,12 +284,12 @@ class CompletionCreateParamsBase(TypedDict, total=False): are present. """ - tools: Iterable[ChatCompletionToolParam] + tools: Iterable[ChatCompletionToolUnionParam] """A list of tools the model may call. - Currently, only functions are supported as a tool. Use this to provide a list of - functions the model may generate JSON inputs for. A max of 128 functions are - supported. + You can provide either + [custom tools](https://platform.openai.com/docs/guides/function-calling#custom-tools) + or [function tools](https://platform.openai.com/docs/guides/function-calling). """ top_logprobs: Optional[int] @@ -292,11 +309,20 @@ class CompletionCreateParamsBase(TypedDict, total=False): """ user: str - """A stable identifier for your end-users. + """This field is being replaced by `safety_identifier` and `prompt_cache_key`. + + Use `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + """ + + verbosity: Optional[Literal["low", "medium", "high"]] + """Constrains the verbosity of the model's response. - Used to boost cache hit rates by better bucketing similar requests and to help - OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + Lower values will result in more concise responses, while higher values will + result in more verbose responses. Currently supported values are `low`, + `medium`, and `high`. """ web_search_options: WebSearchOptions diff --git a/portkey_ai/_vendor/openai/types/chat/parsed_function_tool_call.py b/portkey_ai/_vendor/openai/types/chat/parsed_function_tool_call.py index 3e90789f..e06b3546 100644 --- a/portkey_ai/_vendor/openai/types/chat/parsed_function_tool_call.py +++ b/portkey_ai/_vendor/openai/types/chat/parsed_function_tool_call.py @@ -2,7 +2,7 @@ from typing import Optional -from .chat_completion_message_tool_call import Function, ChatCompletionMessageToolCall +from .chat_completion_message_function_tool_call import Function, ChatCompletionMessageFunctionToolCall __all__ = ["ParsedFunctionToolCall", "ParsedFunction"] @@ -24,6 +24,6 @@ class ParsedFunction(Function): """ -class ParsedFunctionToolCall(ChatCompletionMessageToolCall): +class ParsedFunctionToolCall(ChatCompletionMessageFunctionToolCall): function: ParsedFunction """The function that the model called.""" diff --git a/portkey_ai/_vendor/openai/types/eval_create_params.py b/portkey_ai/_vendor/openai/types/eval_create_params.py index 20a37654..96747857 100644 --- a/portkey_ai/_vendor/openai/types/eval_create_params.py +++ b/portkey_ai/_vendor/openai/types/eval_create_params.py @@ -25,6 +25,7 @@ "TestingCriterionLabelModelInputEvalItem", "TestingCriterionLabelModelInputEvalItemContent", "TestingCriterionLabelModelInputEvalItemContentOutputText", + "TestingCriterionLabelModelInputEvalItemContentInputImage", "TestingCriterionTextSimilarity", "TestingCriterionPython", "TestingCriterionScoreModel", @@ -109,14 +110,32 @@ class TestingCriterionLabelModelInputEvalItemContentOutputText(TypedDict, total= """The type of the output text. Always `output_text`.""" +class TestingCriterionLabelModelInputEvalItemContentInputImage(TypedDict, total=False): + image_url: Required[str] + """The URL of the image input.""" + + type: Required[Literal["input_image"]] + """The type of the image input. Always `input_image`.""" + + detail: str + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + TestingCriterionLabelModelInputEvalItemContent: TypeAlias = Union[ - str, ResponseInputTextParam, TestingCriterionLabelModelInputEvalItemContentOutputText + str, + ResponseInputTextParam, + TestingCriterionLabelModelInputEvalItemContentOutputText, + TestingCriterionLabelModelInputEvalItemContentInputImage, + Iterable[object], ] class TestingCriterionLabelModelInputEvalItem(TypedDict, total=False): content: Required[TestingCriterionLabelModelInputEvalItemContent] - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Required[Literal["user", "assistant", "system", "developer"]] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source.py b/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source.py index 0a942cd2..bb39d1d3 100644 --- a/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source.py +++ b/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source.py @@ -6,10 +6,10 @@ from ..._utils import PropertyInfo from ..._models import BaseModel from ..shared.metadata import Metadata -from ..chat.chat_completion_tool import ChatCompletionTool from ..shared.response_format_text import ResponseFormatText from ..responses.easy_input_message import EasyInputMessage from ..responses.response_input_text import ResponseInputText +from ..chat.chat_completion_function_tool import ChatCompletionFunctionTool from ..shared.response_format_json_object import ResponseFormatJSONObject from ..shared.response_format_json_schema import ResponseFormatJSONSchema @@ -26,6 +26,7 @@ "InputMessagesTemplateTemplateMessage", "InputMessagesTemplateTemplateMessageContent", "InputMessagesTemplateTemplateMessageContentOutputText", + "InputMessagesTemplateTemplateMessageContentInputImage", "InputMessagesItemReference", "SamplingParams", "SamplingParamsResponseFormat", @@ -94,14 +95,32 @@ class InputMessagesTemplateTemplateMessageContentOutputText(BaseModel): """The type of the output text. Always `output_text`.""" +class InputMessagesTemplateTemplateMessageContentInputImage(BaseModel): + image_url: str + """The URL of the image input.""" + + type: Literal["input_image"] + """The type of the image input. Always `input_image`.""" + + detail: Optional[str] = None + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + InputMessagesTemplateTemplateMessageContent: TypeAlias = Union[ - str, ResponseInputText, InputMessagesTemplateTemplateMessageContentOutputText + str, + ResponseInputText, + InputMessagesTemplateTemplateMessageContentOutputText, + InputMessagesTemplateTemplateMessageContentInputImage, + List[object], ] class InputMessagesTemplateTemplateMessage(BaseModel): content: InputMessagesTemplateTemplateMessageContent - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Literal["user", "assistant", "system", "developer"] """The role of the message input. @@ -167,7 +186,7 @@ class SamplingParams(BaseModel): temperature: Optional[float] = None """A higher temperature increases randomness in the outputs.""" - tools: Optional[List[ChatCompletionTool]] = None + tools: Optional[List[ChatCompletionFunctionTool]] = None """A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of diff --git a/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source_param.py b/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source_param.py index 84344fcd..7c71ecbe 100644 --- a/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source_param.py +++ b/portkey_ai/_vendor/openai/types/evals/create_eval_completions_run_data_source_param.py @@ -6,10 +6,10 @@ from typing_extensions import Literal, Required, TypeAlias, TypedDict from ..shared_params.metadata import Metadata -from ..chat.chat_completion_tool_param import ChatCompletionToolParam from ..responses.easy_input_message_param import EasyInputMessageParam from ..shared_params.response_format_text import ResponseFormatText from ..responses.response_input_text_param import ResponseInputTextParam +from ..chat.chat_completion_function_tool_param import ChatCompletionFunctionToolParam from ..shared_params.response_format_json_object import ResponseFormatJSONObject from ..shared_params.response_format_json_schema import ResponseFormatJSONSchema @@ -26,6 +26,7 @@ "InputMessagesTemplateTemplateMessage", "InputMessagesTemplateTemplateMessageContent", "InputMessagesTemplateTemplateMessageContentOutputText", + "InputMessagesTemplateTemplateMessageContentInputImage", "InputMessagesItemReference", "SamplingParams", "SamplingParamsResponseFormat", @@ -92,14 +93,32 @@ class InputMessagesTemplateTemplateMessageContentOutputText(TypedDict, total=Fal """The type of the output text. Always `output_text`.""" +class InputMessagesTemplateTemplateMessageContentInputImage(TypedDict, total=False): + image_url: Required[str] + """The URL of the image input.""" + + type: Required[Literal["input_image"]] + """The type of the image input. Always `input_image`.""" + + detail: str + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + InputMessagesTemplateTemplateMessageContent: TypeAlias = Union[ - str, ResponseInputTextParam, InputMessagesTemplateTemplateMessageContentOutputText + str, + ResponseInputTextParam, + InputMessagesTemplateTemplateMessageContentOutputText, + InputMessagesTemplateTemplateMessageContentInputImage, + Iterable[object], ] class InputMessagesTemplateTemplateMessage(TypedDict, total=False): content: Required[InputMessagesTemplateTemplateMessageContent] - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Required[Literal["user", "assistant", "system", "developer"]] """The role of the message input. @@ -161,7 +180,7 @@ class SamplingParams(TypedDict, total=False): temperature: float """A higher temperature increases randomness in the outputs.""" - tools: Iterable[ChatCompletionToolParam] + tools: Iterable[ChatCompletionFunctionToolParam] """A list of tools the model may call. Currently, only functions are supported as a tool. Use this to provide a list of diff --git a/portkey_ai/_vendor/openai/types/evals/run_cancel_response.py b/portkey_ai/_vendor/openai/types/evals/run_cancel_response.py index 12cc8680..7f4f4c9c 100644 --- a/portkey_ai/_vendor/openai/types/evals/run_cancel_response.py +++ b/portkey_ai/_vendor/openai/types/evals/run_cancel_response.py @@ -32,6 +32,7 @@ "DataSourceResponsesInputMessagesTemplateTemplateEvalItem", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText", + "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage", "DataSourceResponsesInputMessagesItemReference", "DataSourceResponsesSamplingParams", "DataSourceResponsesSamplingParamsText", @@ -138,14 +139,32 @@ class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText( """The type of the output text. Always `output_text`.""" +class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage(BaseModel): + image_url: str + """The URL of the image input.""" + + type: Literal["input_image"] + """The type of the image input. Always `input_image`.""" + + detail: Optional[str] = None + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent: TypeAlias = Union[ - str, ResponseInputText, DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText + str, + ResponseInputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage, + List[object], ] class DataSourceResponsesInputMessagesTemplateTemplateEvalItem(BaseModel): content: DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Literal["user", "assistant", "system", "developer"] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/evals/run_create_params.py b/portkey_ai/_vendor/openai/types/evals/run_create_params.py index 354a8113..1622b00e 100644 --- a/portkey_ai/_vendor/openai/types/evals/run_create_params.py +++ b/portkey_ai/_vendor/openai/types/evals/run_create_params.py @@ -29,6 +29,7 @@ "DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItem", "DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContent", "DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContentOutputText", + "DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContentInputImage", "DataSourceCreateEvalResponsesRunDataSourceInputMessagesItemReference", "DataSourceCreateEvalResponsesRunDataSourceSamplingParams", "DataSourceCreateEvalResponsesRunDataSourceSamplingParamsText", @@ -153,16 +154,34 @@ class DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEva """The type of the output text. Always `output_text`.""" +class DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContentInputImage( + TypedDict, total=False +): + image_url: Required[str] + """The URL of the image input.""" + + type: Required[Literal["input_image"]] + """The type of the image input. Always `input_image`.""" + + detail: str + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContent: TypeAlias = Union[ str, ResponseInputTextParam, DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContentOutputText, + DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContentInputImage, + Iterable[object], ] class DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItem(TypedDict, total=False): content: Required[DataSourceCreateEvalResponsesRunDataSourceInputMessagesTemplateTemplateEvalItemContent] - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Required[Literal["user", "assistant", "system", "developer"]] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/evals/run_create_response.py b/portkey_ai/_vendor/openai/types/evals/run_create_response.py index 776ebb41..fba53215 100644 --- a/portkey_ai/_vendor/openai/types/evals/run_create_response.py +++ b/portkey_ai/_vendor/openai/types/evals/run_create_response.py @@ -32,6 +32,7 @@ "DataSourceResponsesInputMessagesTemplateTemplateEvalItem", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText", + "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage", "DataSourceResponsesInputMessagesItemReference", "DataSourceResponsesSamplingParams", "DataSourceResponsesSamplingParamsText", @@ -138,14 +139,32 @@ class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText( """The type of the output text. Always `output_text`.""" +class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage(BaseModel): + image_url: str + """The URL of the image input.""" + + type: Literal["input_image"] + """The type of the image input. Always `input_image`.""" + + detail: Optional[str] = None + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent: TypeAlias = Union[ - str, ResponseInputText, DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText + str, + ResponseInputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage, + List[object], ] class DataSourceResponsesInputMessagesTemplateTemplateEvalItem(BaseModel): content: DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Literal["user", "assistant", "system", "developer"] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/evals/run_list_response.py b/portkey_ai/_vendor/openai/types/evals/run_list_response.py index 9e2374f9..e9e445af 100644 --- a/portkey_ai/_vendor/openai/types/evals/run_list_response.py +++ b/portkey_ai/_vendor/openai/types/evals/run_list_response.py @@ -32,6 +32,7 @@ "DataSourceResponsesInputMessagesTemplateTemplateEvalItem", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText", + "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage", "DataSourceResponsesInputMessagesItemReference", "DataSourceResponsesSamplingParams", "DataSourceResponsesSamplingParamsText", @@ -138,14 +139,32 @@ class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText( """The type of the output text. Always `output_text`.""" +class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage(BaseModel): + image_url: str + """The URL of the image input.""" + + type: Literal["input_image"] + """The type of the image input. Always `input_image`.""" + + detail: Optional[str] = None + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent: TypeAlias = Union[ - str, ResponseInputText, DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText + str, + ResponseInputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage, + List[object], ] class DataSourceResponsesInputMessagesTemplateTemplateEvalItem(BaseModel): content: DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Literal["user", "assistant", "system", "developer"] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/evals/run_retrieve_response.py b/portkey_ai/_vendor/openai/types/evals/run_retrieve_response.py index a4f43ce3..e13f1abe 100644 --- a/portkey_ai/_vendor/openai/types/evals/run_retrieve_response.py +++ b/portkey_ai/_vendor/openai/types/evals/run_retrieve_response.py @@ -32,6 +32,7 @@ "DataSourceResponsesInputMessagesTemplateTemplateEvalItem", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent", "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText", + "DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage", "DataSourceResponsesInputMessagesItemReference", "DataSourceResponsesSamplingParams", "DataSourceResponsesSamplingParamsText", @@ -138,14 +139,32 @@ class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText( """The type of the output text. Always `output_text`.""" +class DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage(BaseModel): + image_url: str + """The URL of the image input.""" + + type: Literal["input_image"] + """The type of the image input. Always `input_image`.""" + + detail: Optional[str] = None + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent: TypeAlias = Union[ - str, ResponseInputText, DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText + str, + ResponseInputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentOutputText, + DataSourceResponsesInputMessagesTemplateTemplateEvalItemContentInputImage, + List[object], ] class DataSourceResponsesInputMessagesTemplateTemplateEvalItem(BaseModel): content: DataSourceResponsesInputMessagesTemplateTemplateEvalItemContent - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Literal["user", "assistant", "system", "developer"] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/file_object.py b/portkey_ai/_vendor/openai/types/file_object.py index 1d65e698..883c2de0 100644 --- a/portkey_ai/_vendor/openai/types/file_object.py +++ b/portkey_ai/_vendor/openai/types/file_object.py @@ -25,12 +25,19 @@ class FileObject(BaseModel): """The object type, which is always `file`.""" purpose: Literal[ - "assistants", "assistants_output", "batch", "batch_output", "fine-tune", "fine-tune-results", "vision" + "assistants", + "assistants_output", + "batch", + "batch_output", + "fine-tune", + "fine-tune-results", + "vision", + "user_data", ] """The intended purpose of the file. Supported values are `assistants`, `assistants_output`, `batch`, `batch_output`, - `fine-tune`, `fine-tune-results` and `vision`. + `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. """ status: Literal["uploaded", "processed", "error"] diff --git a/portkey_ai/_vendor/openai/types/fine_tuning/job_create_params.py b/portkey_ai/_vendor/openai/types/fine_tuning/job_create_params.py index 6b2f41cb..5514db1e 100644 --- a/portkey_ai/_vendor/openai/types/fine_tuning/job_create_params.py +++ b/portkey_ai/_vendor/openai/types/fine_tuning/job_create_params.py @@ -37,7 +37,8 @@ class JobCreateParams(TypedDict, total=False): [preference](https://platform.openai.com/docs/api-reference/fine-tuning/preference-input) format. - See the [fine-tuning guide](https://platform.openai.com/docs/guides/fine-tuning) + See the + [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization) for more details. """ @@ -91,7 +92,8 @@ class JobCreateParams(TypedDict, total=False): Your dataset must be formatted as a JSONL file. You must upload your file with the purpose `fine-tune`. - See the [fine-tuning guide](https://platform.openai.com/docs/guides/fine-tuning) + See the + [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization) for more details. """ diff --git a/portkey_ai/_vendor/openai/types/graders/label_model_grader.py b/portkey_ai/_vendor/openai/types/graders/label_model_grader.py index d95ccc6d..76dbfb85 100644 --- a/portkey_ai/_vendor/openai/types/graders/label_model_grader.py +++ b/portkey_ai/_vendor/openai/types/graders/label_model_grader.py @@ -6,7 +6,7 @@ from ..._models import BaseModel from ..responses.response_input_text import ResponseInputText -__all__ = ["LabelModelGrader", "Input", "InputContent", "InputContentOutputText"] +__all__ = ["LabelModelGrader", "Input", "InputContent", "InputContentOutputText", "InputContentInputImage"] class InputContentOutputText(BaseModel): @@ -17,12 +17,26 @@ class InputContentOutputText(BaseModel): """The type of the output text. Always `output_text`.""" -InputContent: TypeAlias = Union[str, ResponseInputText, InputContentOutputText] +class InputContentInputImage(BaseModel): + image_url: str + """The URL of the image input.""" + + type: Literal["input_image"] + """The type of the image input. Always `input_image`.""" + + detail: Optional[str] = None + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + +InputContent: TypeAlias = Union[str, ResponseInputText, InputContentOutputText, InputContentInputImage, List[object]] class Input(BaseModel): content: InputContent - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Literal["user", "assistant", "system", "developer"] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/graders/label_model_grader_param.py b/portkey_ai/_vendor/openai/types/graders/label_model_grader_param.py index 76d01421..941c8a1b 100644 --- a/portkey_ai/_vendor/openai/types/graders/label_model_grader_param.py +++ b/portkey_ai/_vendor/openai/types/graders/label_model_grader_param.py @@ -7,7 +7,7 @@ from ..responses.response_input_text_param import ResponseInputTextParam -__all__ = ["LabelModelGraderParam", "Input", "InputContent", "InputContentOutputText"] +__all__ = ["LabelModelGraderParam", "Input", "InputContent", "InputContentOutputText", "InputContentInputImage"] class InputContentOutputText(TypedDict, total=False): @@ -18,12 +18,28 @@ class InputContentOutputText(TypedDict, total=False): """The type of the output text. Always `output_text`.""" -InputContent: TypeAlias = Union[str, ResponseInputTextParam, InputContentOutputText] +class InputContentInputImage(TypedDict, total=False): + image_url: Required[str] + """The URL of the image input.""" + + type: Required[Literal["input_image"]] + """The type of the image input. Always `input_image`.""" + + detail: str + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + +InputContent: TypeAlias = Union[ + str, ResponseInputTextParam, InputContentOutputText, InputContentInputImage, Iterable[object] +] class Input(TypedDict, total=False): content: Required[InputContent] - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Required[Literal["user", "assistant", "system", "developer"]] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/graders/score_model_grader.py b/portkey_ai/_vendor/openai/types/graders/score_model_grader.py index 1349f75a..e6af0ebc 100644 --- a/portkey_ai/_vendor/openai/types/graders/score_model_grader.py +++ b/portkey_ai/_vendor/openai/types/graders/score_model_grader.py @@ -6,7 +6,7 @@ from ..._models import BaseModel from ..responses.response_input_text import ResponseInputText -__all__ = ["ScoreModelGrader", "Input", "InputContent", "InputContentOutputText"] +__all__ = ["ScoreModelGrader", "Input", "InputContent", "InputContentOutputText", "InputContentInputImage"] class InputContentOutputText(BaseModel): @@ -17,12 +17,26 @@ class InputContentOutputText(BaseModel): """The type of the output text. Always `output_text`.""" -InputContent: TypeAlias = Union[str, ResponseInputText, InputContentOutputText] +class InputContentInputImage(BaseModel): + image_url: str + """The URL of the image input.""" + + type: Literal["input_image"] + """The type of the image input. Always `input_image`.""" + + detail: Optional[str] = None + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + +InputContent: TypeAlias = Union[str, ResponseInputText, InputContentOutputText, InputContentInputImage, List[object]] class Input(BaseModel): content: InputContent - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Literal["user", "assistant", "system", "developer"] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/graders/score_model_grader_param.py b/portkey_ai/_vendor/openai/types/graders/score_model_grader_param.py index 673f14e4..47c99280 100644 --- a/portkey_ai/_vendor/openai/types/graders/score_model_grader_param.py +++ b/portkey_ai/_vendor/openai/types/graders/score_model_grader_param.py @@ -7,7 +7,7 @@ from ..responses.response_input_text_param import ResponseInputTextParam -__all__ = ["ScoreModelGraderParam", "Input", "InputContent", "InputContentOutputText"] +__all__ = ["ScoreModelGraderParam", "Input", "InputContent", "InputContentOutputText", "InputContentInputImage"] class InputContentOutputText(TypedDict, total=False): @@ -18,12 +18,28 @@ class InputContentOutputText(TypedDict, total=False): """The type of the output text. Always `output_text`.""" -InputContent: TypeAlias = Union[str, ResponseInputTextParam, InputContentOutputText] +class InputContentInputImage(TypedDict, total=False): + image_url: Required[str] + """The URL of the image input.""" + + type: Required[Literal["input_image"]] + """The type of the image input. Always `input_image`.""" + + detail: str + """The detail level of the image to be sent to the model. + + One of `high`, `low`, or `auto`. Defaults to `auto`. + """ + + +InputContent: TypeAlias = Union[ + str, ResponseInputTextParam, InputContentOutputText, InputContentInputImage, Iterable[object] +] class Input(TypedDict, total=False): content: Required[InputContent] - """Text inputs to the model - can contain template strings.""" + """Inputs to the model - can contain template strings.""" role: Required[Literal["user", "assistant", "system", "developer"]] """The role of the message input. diff --git a/portkey_ai/_vendor/openai/types/image_edit_completed_event.py b/portkey_ai/_vendor/openai/types/image_edit_completed_event.py new file mode 100644 index 00000000..a40682da --- /dev/null +++ b/portkey_ai/_vendor/openai/types/image_edit_completed_event.py @@ -0,0 +1,55 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["ImageEditCompletedEvent", "Usage", "UsageInputTokensDetails"] + + +class UsageInputTokensDetails(BaseModel): + image_tokens: int + """The number of image tokens in the input prompt.""" + + text_tokens: int + """The number of text tokens in the input prompt.""" + + +class Usage(BaseModel): + input_tokens: int + """The number of tokens (images and text) in the input prompt.""" + + input_tokens_details: UsageInputTokensDetails + """The input tokens detailed information for the image generation.""" + + output_tokens: int + """The number of image tokens in the output image.""" + + total_tokens: int + """The total number of tokens (images and text) used for the image generation.""" + + +class ImageEditCompletedEvent(BaseModel): + b64_json: str + """Base64-encoded final edited image data, suitable for rendering as an image.""" + + background: Literal["transparent", "opaque", "auto"] + """The background setting for the edited image.""" + + created_at: int + """The Unix timestamp when the event was created.""" + + output_format: Literal["png", "webp", "jpeg"] + """The output format for the edited image.""" + + quality: Literal["low", "medium", "high", "auto"] + """The quality setting for the edited image.""" + + size: Literal["1024x1024", "1024x1536", "1536x1024", "auto"] + """The size of the edited image.""" + + type: Literal["image_edit.completed"] + """The type of the event. Always `image_edit.completed`.""" + + usage: Usage + """For `gpt-image-1` only, the token usage information for the image generation.""" diff --git a/portkey_ai/_vendor/openai/types/image_edit_params.py b/portkey_ai/_vendor/openai/types/image_edit_params.py index 4f931ce1..c0481012 100644 --- a/portkey_ai/_vendor/openai/types/image_edit_params.py +++ b/portkey_ai/_vendor/openai/types/image_edit_params.py @@ -8,10 +8,10 @@ from .._types import FileTypes from .image_model import ImageModel -__all__ = ["ImageEditParams"] +__all__ = ["ImageEditParamsBase", "ImageEditParamsNonStreaming", "ImageEditParamsStreaming"] -class ImageEditParams(TypedDict, total=False): +class ImageEditParamsBase(TypedDict, total=False): image: Required[Union[FileTypes, List[FileTypes]]] """The image(s) to edit. Must be a supported image file or an array of images. @@ -40,6 +40,13 @@ class ImageEditParams(TypedDict, total=False): be set to either `png` (default value) or `webp`. """ + input_fidelity: Optional[Literal["high", "low"]] + """ + Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + """ + mask: FileTypes """An additional image whose fully transparent areas (e.g. @@ -58,6 +65,31 @@ class ImageEditParams(TypedDict, total=False): n: Optional[int] """The number of images to generate. Must be between 1 and 10.""" + output_compression: Optional[int] + """The compression level (0-100%) for the generated images. + + This parameter is only supported for `gpt-image-1` with the `webp` or `jpeg` + output formats, and defaults to 100. + """ + + output_format: Optional[Literal["png", "jpeg", "webp"]] + """The format in which the generated images are returned. + + This parameter is only supported for `gpt-image-1`. Must be one of `png`, + `jpeg`, or `webp`. The default value is `png`. + """ + + partial_images: Optional[int] + """The number of partial images to generate. + + This parameter is used for streaming responses that return partial images. Value + must be between 0 and 3. When set to 0, the response will be a single image sent + in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + """ + quality: Optional[Literal["standard", "low", "medium", "high", "auto"]] """The quality of the image that will be generated. @@ -87,3 +119,26 @@ class ImageEditParams(TypedDict, total=False): and detect abuse. [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). """ + + +class ImageEditParamsNonStreaming(ImageEditParamsBase, total=False): + stream: Optional[Literal[False]] + """Edit the image in streaming mode. + + Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. + """ + + +class ImageEditParamsStreaming(ImageEditParamsBase): + stream: Required[Literal[True]] + """Edit the image in streaming mode. + + Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. + """ + + +ImageEditParams = Union[ImageEditParamsNonStreaming, ImageEditParamsStreaming] diff --git a/portkey_ai/_vendor/openai/types/image_edit_partial_image_event.py b/portkey_ai/_vendor/openai/types/image_edit_partial_image_event.py new file mode 100644 index 00000000..20da45ef --- /dev/null +++ b/portkey_ai/_vendor/openai/types/image_edit_partial_image_event.py @@ -0,0 +1,33 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["ImageEditPartialImageEvent"] + + +class ImageEditPartialImageEvent(BaseModel): + b64_json: str + """Base64-encoded partial image data, suitable for rendering as an image.""" + + background: Literal["transparent", "opaque", "auto"] + """The background setting for the requested edited image.""" + + created_at: int + """The Unix timestamp when the event was created.""" + + output_format: Literal["png", "webp", "jpeg"] + """The output format for the requested edited image.""" + + partial_image_index: int + """0-based index for the partial image (streaming).""" + + quality: Literal["low", "medium", "high", "auto"] + """The quality setting for the requested edited image.""" + + size: Literal["1024x1024", "1024x1536", "1536x1024", "auto"] + """The size of the requested edited image.""" + + type: Literal["image_edit.partial_image"] + """The type of the event. Always `image_edit.partial_image`.""" diff --git a/portkey_ai/_vendor/openai/types/image_edit_stream_event.py b/portkey_ai/_vendor/openai/types/image_edit_stream_event.py new file mode 100644 index 00000000..759f6c6d --- /dev/null +++ b/portkey_ai/_vendor/openai/types/image_edit_stream_event.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Union +from typing_extensions import Annotated, TypeAlias + +from .._utils import PropertyInfo +from .image_edit_completed_event import ImageEditCompletedEvent +from .image_edit_partial_image_event import ImageEditPartialImageEvent + +__all__ = ["ImageEditStreamEvent"] + +ImageEditStreamEvent: TypeAlias = Annotated[ + Union[ImageEditPartialImageEvent, ImageEditCompletedEvent], PropertyInfo(discriminator="type") +] diff --git a/portkey_ai/_vendor/openai/types/image_gen_completed_event.py b/portkey_ai/_vendor/openai/types/image_gen_completed_event.py new file mode 100644 index 00000000..e78da842 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/image_gen_completed_event.py @@ -0,0 +1,55 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["ImageGenCompletedEvent", "Usage", "UsageInputTokensDetails"] + + +class UsageInputTokensDetails(BaseModel): + image_tokens: int + """The number of image tokens in the input prompt.""" + + text_tokens: int + """The number of text tokens in the input prompt.""" + + +class Usage(BaseModel): + input_tokens: int + """The number of tokens (images and text) in the input prompt.""" + + input_tokens_details: UsageInputTokensDetails + """The input tokens detailed information for the image generation.""" + + output_tokens: int + """The number of image tokens in the output image.""" + + total_tokens: int + """The total number of tokens (images and text) used for the image generation.""" + + +class ImageGenCompletedEvent(BaseModel): + b64_json: str + """Base64-encoded image data, suitable for rendering as an image.""" + + background: Literal["transparent", "opaque", "auto"] + """The background setting for the generated image.""" + + created_at: int + """The Unix timestamp when the event was created.""" + + output_format: Literal["png", "webp", "jpeg"] + """The output format for the generated image.""" + + quality: Literal["low", "medium", "high", "auto"] + """The quality setting for the generated image.""" + + size: Literal["1024x1024", "1024x1536", "1536x1024", "auto"] + """The size of the generated image.""" + + type: Literal["image_generation.completed"] + """The type of the event. Always `image_generation.completed`.""" + + usage: Usage + """For `gpt-image-1` only, the token usage information for the image generation.""" diff --git a/portkey_ai/_vendor/openai/types/image_gen_partial_image_event.py b/portkey_ai/_vendor/openai/types/image_gen_partial_image_event.py new file mode 100644 index 00000000..965d4506 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/image_gen_partial_image_event.py @@ -0,0 +1,33 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["ImageGenPartialImageEvent"] + + +class ImageGenPartialImageEvent(BaseModel): + b64_json: str + """Base64-encoded partial image data, suitable for rendering as an image.""" + + background: Literal["transparent", "opaque", "auto"] + """The background setting for the requested image.""" + + created_at: int + """The Unix timestamp when the event was created.""" + + output_format: Literal["png", "webp", "jpeg"] + """The output format for the requested image.""" + + partial_image_index: int + """0-based index for the partial image (streaming).""" + + quality: Literal["low", "medium", "high", "auto"] + """The quality setting for the requested image.""" + + size: Literal["1024x1024", "1024x1536", "1536x1024", "auto"] + """The size of the requested image.""" + + type: Literal["image_generation.partial_image"] + """The type of the event. Always `image_generation.partial_image`.""" diff --git a/portkey_ai/_vendor/openai/types/image_gen_stream_event.py b/portkey_ai/_vendor/openai/types/image_gen_stream_event.py new file mode 100644 index 00000000..7dde5d52 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/image_gen_stream_event.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Union +from typing_extensions import Annotated, TypeAlias + +from .._utils import PropertyInfo +from .image_gen_completed_event import ImageGenCompletedEvent +from .image_gen_partial_image_event import ImageGenPartialImageEvent + +__all__ = ["ImageGenStreamEvent"] + +ImageGenStreamEvent: TypeAlias = Annotated[ + Union[ImageGenPartialImageEvent, ImageGenCompletedEvent], PropertyInfo(discriminator="type") +] diff --git a/portkey_ai/_vendor/openai/types/image_generate_params.py b/portkey_ai/_vendor/openai/types/image_generate_params.py index 8fc10220..e9e9292c 100644 --- a/portkey_ai/_vendor/openai/types/image_generate_params.py +++ b/portkey_ai/_vendor/openai/types/image_generate_params.py @@ -7,10 +7,10 @@ from .image_model import ImageModel -__all__ = ["ImageGenerateParams"] +__all__ = ["ImageGenerateParamsBase", "ImageGenerateParamsNonStreaming", "ImageGenerateParamsStreaming"] -class ImageGenerateParams(TypedDict, total=False): +class ImageGenerateParamsBase(TypedDict, total=False): prompt: Required[str] """A text description of the desired image(s). @@ -62,6 +62,17 @@ class ImageGenerateParams(TypedDict, total=False): `jpeg`, or `webp`. """ + partial_images: Optional[int] + """The number of partial images to generate. + + This parameter is used for streaming responses that return partial images. Value + must be between 0 and 3. When set to 0, the response will be a single image sent + in one streaming event. + + Note that the final image may be sent before the full number of partial images + are generated if the full image is generated more quickly. + """ + quality: Optional[Literal["standard", "hd", "low", "medium", "high", "auto"]] """The quality of the image that will be generated. @@ -107,3 +118,26 @@ class ImageGenerateParams(TypedDict, total=False): and detect abuse. [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). """ + + +class ImageGenerateParamsNonStreaming(ImageGenerateParamsBase, total=False): + stream: Optional[Literal[False]] + """Generate the image in streaming mode. + + Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + """ + + +class ImageGenerateParamsStreaming(ImageGenerateParamsBase): + stream: Required[Literal[True]] + """Generate the image in streaming mode. + + Defaults to `false`. See the + [Image generation guide](https://platform.openai.com/docs/guides/image-generation) + for more information. This parameter is only supported for `gpt-image-1`. + """ + + +ImageGenerateParams = Union[ImageGenerateParamsNonStreaming, ImageGenerateParamsStreaming] diff --git a/portkey_ai/_vendor/openai/types/images_response.py b/portkey_ai/_vendor/openai/types/images_response.py index df454afa..89cc71df 100644 --- a/portkey_ai/_vendor/openai/types/images_response.py +++ b/portkey_ai/_vendor/openai/types/images_response.py @@ -1,6 +1,7 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from typing import List, Optional +from typing_extensions import Literal from .image import Image from .._models import BaseModel @@ -24,7 +25,7 @@ class Usage(BaseModel): """The input tokens detailed information for the image generation.""" output_tokens: int - """The number of image tokens in the output image.""" + """The number of output tokens generated by the model.""" total_tokens: int """The total number of tokens (images and text) used for the image generation.""" @@ -34,8 +35,26 @@ class ImagesResponse(BaseModel): created: int """The Unix timestamp (in seconds) of when the image was created.""" + background: Optional[Literal["transparent", "opaque"]] = None + """The background parameter used for the image generation. + + Either `transparent` or `opaque`. + """ + data: Optional[List[Image]] = None """The list of generated images.""" + output_format: Optional[Literal["png", "webp", "jpeg"]] = None + """The output format of the image generation. Either `png`, `webp`, or `jpeg`.""" + + quality: Optional[Literal["low", "medium", "high"]] = None + """The quality of the image generated. Either `low`, `medium`, or `high`.""" + + size: Optional[Literal["1024x1024", "1024x1536", "1536x1024"]] = None + """The size of the image generated. + + Either `1024x1024`, `1024x1536`, or `1536x1024`. + """ + usage: Optional[Usage] = None """For `gpt-image-1` only, the token usage information for the image generation.""" diff --git a/portkey_ai/_vendor/openai/types/responses/__init__.py b/portkey_ai/_vendor/openai/types/responses/__init__.py index d33c26d2..74d86880 100644 --- a/portkey_ai/_vendor/openai/types/responses/__init__.py +++ b/portkey_ai/_vendor/openai/types/responses/__init__.py @@ -5,6 +5,7 @@ from .tool import Tool as Tool from .response import Response as Response from .tool_param import ToolParam as ToolParam +from .custom_tool import CustomTool as CustomTool from .computer_tool import ComputerTool as ComputerTool from .function_tool import FunctionTool as FunctionTool from .response_item import ResponseItem as ResponseItem @@ -18,17 +19,23 @@ ParsedResponseOutputMessage as ParsedResponseOutputMessage, ParsedResponseFunctionToolCall as ParsedResponseFunctionToolCall, ) +from .response_prompt import ResponsePrompt as ResponsePrompt from .response_status import ResponseStatus as ResponseStatus +from .tool_choice_mcp import ToolChoiceMcp as ToolChoiceMcp from .web_search_tool import WebSearchTool as WebSearchTool from .file_search_tool import FileSearchTool as FileSearchTool +from .custom_tool_param import CustomToolParam as CustomToolParam from .tool_choice_types import ToolChoiceTypes as ToolChoiceTypes from .easy_input_message import EasyInputMessage as EasyInputMessage from .response_item_list import ResponseItemList as ResponseItemList +from .tool_choice_custom import ToolChoiceCustom as ToolChoiceCustom from .computer_tool_param import ComputerToolParam as ComputerToolParam from .function_tool_param import FunctionToolParam as FunctionToolParam from .response_includable import ResponseIncludable as ResponseIncludable from .response_input_file import ResponseInputFile as ResponseInputFile +from .response_input_item import ResponseInputItem as ResponseInputItem from .response_input_text import ResponseInputText as ResponseInputText +from .tool_choice_allowed import ToolChoiceAllowed as ToolChoiceAllowed from .tool_choice_options import ToolChoiceOptions as ToolChoiceOptions from .response_error_event import ResponseErrorEvent as ResponseErrorEvent from .response_input_image import ResponseInputImage as ResponseInputImage @@ -38,8 +45,10 @@ from .response_text_config import ResponseTextConfig as ResponseTextConfig from .tool_choice_function import ToolChoiceFunction as ToolChoiceFunction from .response_failed_event import ResponseFailedEvent as ResponseFailedEvent +from .response_prompt_param import ResponsePromptParam as ResponsePromptParam from .response_queued_event import ResponseQueuedEvent as ResponseQueuedEvent from .response_stream_event import ResponseStreamEvent as ResponseStreamEvent +from .tool_choice_mcp_param import ToolChoiceMcpParam as ToolChoiceMcpParam from .web_search_tool_param import WebSearchToolParam as WebSearchToolParam from .file_search_tool_param import FileSearchToolParam as FileSearchToolParam from .input_item_list_params import InputItemListParams as InputItemListParams @@ -54,12 +63,15 @@ from .response_completed_event import ResponseCompletedEvent as ResponseCompletedEvent from .response_retrieve_params import ResponseRetrieveParams as ResponseRetrieveParams from .response_text_done_event import ResponseTextDoneEvent as ResponseTextDoneEvent +from .tool_choice_custom_param import ToolChoiceCustomParam as ToolChoiceCustomParam from .response_audio_done_event import ResponseAudioDoneEvent as ResponseAudioDoneEvent +from .response_custom_tool_call import ResponseCustomToolCall as ResponseCustomToolCall from .response_incomplete_event import ResponseIncompleteEvent as ResponseIncompleteEvent from .response_input_file_param import ResponseInputFileParam as ResponseInputFileParam from .response_input_item_param import ResponseInputItemParam as ResponseInputItemParam from .response_input_text_param import ResponseInputTextParam as ResponseInputTextParam from .response_text_delta_event import ResponseTextDeltaEvent as ResponseTextDeltaEvent +from .tool_choice_allowed_param import ToolChoiceAllowedParam as ToolChoiceAllowedParam from .response_audio_delta_event import ResponseAudioDeltaEvent as ResponseAudioDeltaEvent from .response_in_progress_event import ResponseInProgressEvent as ResponseInProgressEvent from .response_input_image_param import ResponseInputImageParam as ResponseInputImageParam @@ -76,13 +88,13 @@ from .response_refusal_delta_event import ResponseRefusalDeltaEvent as ResponseRefusalDeltaEvent from .response_output_message_param import ResponseOutputMessageParam as ResponseOutputMessageParam from .response_output_refusal_param import ResponseOutputRefusalParam as ResponseOutputRefusalParam -from .response_reasoning_done_event import ResponseReasoningDoneEvent as ResponseReasoningDoneEvent from .response_reasoning_item_param import ResponseReasoningItemParam as ResponseReasoningItemParam from .response_file_search_tool_call import ResponseFileSearchToolCall as ResponseFileSearchToolCall from .response_mcp_call_failed_event import ResponseMcpCallFailedEvent as ResponseMcpCallFailedEvent -from .response_reasoning_delta_event import ResponseReasoningDeltaEvent as ResponseReasoningDeltaEvent +from .response_custom_tool_call_param import ResponseCustomToolCallParam as ResponseCustomToolCallParam from .response_output_item_done_event import ResponseOutputItemDoneEvent as ResponseOutputItemDoneEvent from .response_content_part_done_event import ResponseContentPartDoneEvent as ResponseContentPartDoneEvent +from .response_custom_tool_call_output import ResponseCustomToolCallOutput as ResponseCustomToolCallOutput from .response_function_tool_call_item import ResponseFunctionToolCallItem as ResponseFunctionToolCallItem from .response_output_item_added_event import ResponseOutputItemAddedEvent as ResponseOutputItemAddedEvent from .response_computer_tool_call_param import ResponseComputerToolCallParam as ResponseComputerToolCallParam @@ -91,24 +103,23 @@ from .response_function_tool_call_param import ResponseFunctionToolCallParam as ResponseFunctionToolCallParam from .response_mcp_call_completed_event import ResponseMcpCallCompletedEvent as ResponseMcpCallCompletedEvent from .response_function_web_search_param import ResponseFunctionWebSearchParam as ResponseFunctionWebSearchParam +from .response_reasoning_text_done_event import ResponseReasoningTextDoneEvent as ResponseReasoningTextDoneEvent from .response_code_interpreter_tool_call import ResponseCodeInterpreterToolCall as ResponseCodeInterpreterToolCall from .response_input_message_content_list import ResponseInputMessageContentList as ResponseInputMessageContentList from .response_mcp_call_in_progress_event import ResponseMcpCallInProgressEvent as ResponseMcpCallInProgressEvent +from .response_reasoning_text_delta_event import ResponseReasoningTextDeltaEvent as ResponseReasoningTextDeltaEvent from .response_audio_transcript_done_event import ResponseAudioTranscriptDoneEvent as ResponseAudioTranscriptDoneEvent from .response_file_search_tool_call_param import ResponseFileSearchToolCallParam as ResponseFileSearchToolCallParam from .response_mcp_list_tools_failed_event import ResponseMcpListToolsFailedEvent as ResponseMcpListToolsFailedEvent from .response_audio_transcript_delta_event import ( ResponseAudioTranscriptDeltaEvent as ResponseAudioTranscriptDeltaEvent, ) -from .response_reasoning_summary_done_event import ( - ResponseReasoningSummaryDoneEvent as ResponseReasoningSummaryDoneEvent, +from .response_custom_tool_call_output_param import ( + ResponseCustomToolCallOutputParam as ResponseCustomToolCallOutputParam, ) from .response_mcp_call_arguments_done_event import ( ResponseMcpCallArgumentsDoneEvent as ResponseMcpCallArgumentsDoneEvent, ) -from .response_reasoning_summary_delta_event import ( - ResponseReasoningSummaryDeltaEvent as ResponseReasoningSummaryDeltaEvent, -) from .response_computer_tool_call_output_item import ( ResponseComputerToolCallOutputItem as ResponseComputerToolCallOutputItem, ) @@ -154,6 +165,9 @@ from .response_mcp_list_tools_in_progress_event import ( ResponseMcpListToolsInProgressEvent as ResponseMcpListToolsInProgressEvent, ) +from .response_custom_tool_call_input_done_event import ( + ResponseCustomToolCallInputDoneEvent as ResponseCustomToolCallInputDoneEvent, +) from .response_reasoning_summary_part_done_event import ( ResponseReasoningSummaryPartDoneEvent as ResponseReasoningSummaryPartDoneEvent, ) @@ -163,6 +177,9 @@ from .response_web_search_call_in_progress_event import ( ResponseWebSearchCallInProgressEvent as ResponseWebSearchCallInProgressEvent, ) +from .response_custom_tool_call_input_delta_event import ( + ResponseCustomToolCallInputDeltaEvent as ResponseCustomToolCallInputDeltaEvent, +) from .response_file_search_call_in_progress_event import ( ResponseFileSearchCallInProgressEvent as ResponseFileSearchCallInProgressEvent, ) diff --git a/portkey_ai/_vendor/openai/types/responses/custom_tool.py b/portkey_ai/_vendor/openai/types/responses/custom_tool.py new file mode 100644 index 00000000..c16ae715 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/custom_tool.py @@ -0,0 +1,23 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel +from ..shared.custom_tool_input_format import CustomToolInputFormat + +__all__ = ["CustomTool"] + + +class CustomTool(BaseModel): + name: str + """The name of the custom tool, used to identify it in tool calls.""" + + type: Literal["custom"] + """The type of the custom tool. Always `custom`.""" + + description: Optional[str] = None + """Optional description of the custom tool, used to provide more context.""" + + format: Optional[CustomToolInputFormat] = None + """The input format for the custom tool. Default is unconstrained text.""" diff --git a/portkey_ai/_vendor/openai/types/responses/custom_tool_param.py b/portkey_ai/_vendor/openai/types/responses/custom_tool_param.py new file mode 100644 index 00000000..2afc8b19 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/custom_tool_param.py @@ -0,0 +1,23 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +from ..shared_params.custom_tool_input_format import CustomToolInputFormat + +__all__ = ["CustomToolParam"] + + +class CustomToolParam(TypedDict, total=False): + name: Required[str] + """The name of the custom tool, used to identify it in tool calls.""" + + type: Required[Literal["custom"]] + """The type of the custom tool. Always `custom`.""" + + description: str + """Optional description of the custom tool, used to provide more context.""" + + format: CustomToolInputFormat + """The input format for the custom tool. Default is unconstrained text.""" diff --git a/portkey_ai/_vendor/openai/types/responses/parsed_response.py b/portkey_ai/_vendor/openai/types/responses/parsed_response.py index e59e86d2..1d9db361 100644 --- a/portkey_ai/_vendor/openai/types/responses/parsed_response.py +++ b/portkey_ai/_vendor/openai/types/responses/parsed_response.py @@ -19,6 +19,7 @@ from .response_output_message import ResponseOutputMessage from .response_output_refusal import ResponseOutputRefusal from .response_reasoning_item import ResponseReasoningItem +from .response_custom_tool_call import ResponseCustomToolCall from .response_computer_tool_call import ResponseComputerToolCall from .response_function_tool_call import ResponseFunctionToolCall from .response_function_web_search import ResponseFunctionWebSearch @@ -73,6 +74,7 @@ class ParsedResponseFunctionToolCall(ResponseFunctionToolCall): LocalShellCallAction, McpListTools, ResponseCodeInterpreterToolCall, + ResponseCustomToolCall, ], PropertyInfo(discriminator="type"), ] diff --git a/portkey_ai/_vendor/openai/types/responses/response.py b/portkey_ai/_vendor/openai/types/responses/response.py index 441b3454..5ebb18fd 100644 --- a/portkey_ai/_vendor/openai/types/responses/response.py +++ b/portkey_ai/_vendor/openai/types/responses/response.py @@ -7,10 +7,15 @@ from ..._models import BaseModel from .response_error import ResponseError from .response_usage import ResponseUsage +from .response_prompt import ResponsePrompt from .response_status import ResponseStatus +from .tool_choice_mcp import ToolChoiceMcp from ..shared.metadata import Metadata from ..shared.reasoning import Reasoning from .tool_choice_types import ToolChoiceTypes +from .tool_choice_custom import ToolChoiceCustom +from .response_input_item import ResponseInputItem +from .tool_choice_allowed import ToolChoiceAllowed from .tool_choice_options import ToolChoiceOptions from .response_output_item import ResponseOutputItem from .response_text_config import ResponseTextConfig @@ -25,7 +30,9 @@ class IncompleteDetails(BaseModel): """The reason why the response is incomplete.""" -ToolChoice: TypeAlias = Union[ToolChoiceOptions, ToolChoiceTypes, ToolChoiceFunction] +ToolChoice: TypeAlias = Union[ + ToolChoiceOptions, ToolChoiceAllowed, ToolChoiceTypes, ToolChoiceFunction, ToolChoiceMcp, ToolChoiceCustom +] class Response(BaseModel): @@ -41,10 +48,8 @@ class Response(BaseModel): incomplete_details: Optional[IncompleteDetails] = None """Details about why the response is incomplete.""" - instructions: Optional[str] = None - """ - Inserts a system (or developer) message as the first item in the model's - context. + instructions: Union[str, List[ResponseInputItem], None] = None + """A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -115,8 +120,10 @@ class Response(BaseModel): Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. """ top_p: Optional[float] = None @@ -129,8 +136,8 @@ class Response(BaseModel): """ background: Optional[bool] = None - """Whether to run the model response in the background. - + """ + Whether to run the model response in the background. [Learn more](https://platform.openai.com/docs/guides/background). """ @@ -141,6 +148,14 @@ class Response(BaseModel): [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). """ + max_tool_calls: Optional[int] = None + """ + The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + """ + previous_response_id: Optional[str] = None """The unique ID of the previous response to the model. @@ -148,6 +163,19 @@ class Response(BaseModel): [conversation state](https://platform.openai.com/docs/guides/conversation-state). """ + prompt: Optional[ResponsePrompt] = None + """Reference to a prompt template and its variables. + + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + """ + + prompt_cache_key: Optional[str] = None + """ + Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + """ + reasoning: Optional[Reasoning] = None """**o-series models only** @@ -155,25 +183,33 @@ class Response(BaseModel): [reasoning models](https://platform.openai.com/docs/guides/reasoning). """ - service_tier: Optional[Literal["auto", "default", "flex"]] = None - """Specifies the latency tier to use for processing the request. - - This parameter is relevant for customers subscribed to the scale tier service: + safety_identifier: Optional[str] = None + """ + A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + """ - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] = None + """Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. """ status: Optional[ResponseStatus] = None @@ -192,6 +228,12 @@ class Response(BaseModel): - [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs) """ + top_logprobs: Optional[int] = None + """ + An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. + """ + truncation: Optional[Literal["auto", "disabled"]] = None """The truncation strategy to use for the model response. @@ -209,17 +251,17 @@ class Response(BaseModel): """ user: Optional[str] = None - """A stable identifier for your end-users. + """This field is being replaced by `safety_identifier` and `prompt_cache_key`. - Used to boost cache hit rates by better bucketing similar requests and to help - OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). + Use `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). """ @property def output_text(self) -> str: - """Convenience property that aggregates all `output_text` items from the `output` - list. + """Convenience property that aggregates all `output_text` items from the `output` list. If no `output_text` content blocks exist, then an empty string is returned. """ diff --git a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_delta_event.py b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_delta_event.py index d2224315..c5fef939 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_delta_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_delta_event.py @@ -9,13 +9,19 @@ class ResponseCodeInterpreterCallCodeDeltaEvent(BaseModel): delta: str - """The partial code snippet added by the code interpreter.""" + """The partial code snippet being streamed by the code interpreter.""" + + item_id: str + """The unique identifier of the code interpreter tool call item.""" output_index: int - """The index of the output item that the code interpreter call is in progress.""" + """ + The index of the output item in the response for which the code is being + streamed. + """ sequence_number: int - """The sequence number of this event.""" + """The sequence number of this event, used to order streaming events.""" type: Literal["response.code_interpreter_call_code.delta"] """The type of the event. Always `response.code_interpreter_call_code.delta`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_done_event.py b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_done_event.py index 1ce6796a..5201a02d 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_done_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_code_done_event.py @@ -11,11 +11,14 @@ class ResponseCodeInterpreterCallCodeDoneEvent(BaseModel): code: str """The final code snippet output by the code interpreter.""" + item_id: str + """The unique identifier of the code interpreter tool call item.""" + output_index: int - """The index of the output item that the code interpreter call is in progress.""" + """The index of the output item in the response for which the code is finalized.""" sequence_number: int - """The sequence number of this event.""" + """The sequence number of this event, used to order streaming events.""" type: Literal["response.code_interpreter_call_code.done"] """The type of the event. Always `response.code_interpreter_call_code.done`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_completed_event.py b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_completed_event.py index 3a3a7189..bb9563a1 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_completed_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_completed_event.py @@ -3,20 +3,22 @@ from typing_extensions import Literal from ..._models import BaseModel -from .response_code_interpreter_tool_call import ResponseCodeInterpreterToolCall __all__ = ["ResponseCodeInterpreterCallCompletedEvent"] class ResponseCodeInterpreterCallCompletedEvent(BaseModel): - code_interpreter_call: ResponseCodeInterpreterToolCall - """A tool call to run code.""" + item_id: str + """The unique identifier of the code interpreter tool call item.""" output_index: int - """The index of the output item that the code interpreter call is in progress.""" + """ + The index of the output item in the response for which the code interpreter call + is completed. + """ sequence_number: int - """The sequence number of this event.""" + """The sequence number of this event, used to order streaming events.""" type: Literal["response.code_interpreter_call.completed"] """The type of the event. Always `response.code_interpreter_call.completed`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_in_progress_event.py b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_in_progress_event.py index d1c82309..9c6b2210 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_in_progress_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_in_progress_event.py @@ -3,20 +3,22 @@ from typing_extensions import Literal from ..._models import BaseModel -from .response_code_interpreter_tool_call import ResponseCodeInterpreterToolCall __all__ = ["ResponseCodeInterpreterCallInProgressEvent"] class ResponseCodeInterpreterCallInProgressEvent(BaseModel): - code_interpreter_call: ResponseCodeInterpreterToolCall - """A tool call to run code.""" + item_id: str + """The unique identifier of the code interpreter tool call item.""" output_index: int - """The index of the output item that the code interpreter call is in progress.""" + """ + The index of the output item in the response for which the code interpreter call + is in progress. + """ sequence_number: int - """The sequence number of this event.""" + """The sequence number of this event, used to order streaming events.""" type: Literal["response.code_interpreter_call.in_progress"] """The type of the event. Always `response.code_interpreter_call.in_progress`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_interpreting_event.py b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_interpreting_event.py index 7f4d294f..f6191e41 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_interpreting_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_call_interpreting_event.py @@ -3,20 +3,22 @@ from typing_extensions import Literal from ..._models import BaseModel -from .response_code_interpreter_tool_call import ResponseCodeInterpreterToolCall __all__ = ["ResponseCodeInterpreterCallInterpretingEvent"] class ResponseCodeInterpreterCallInterpretingEvent(BaseModel): - code_interpreter_call: ResponseCodeInterpreterToolCall - """A tool call to run code.""" + item_id: str + """The unique identifier of the code interpreter tool call item.""" output_index: int - """The index of the output item that the code interpreter call is in progress.""" + """ + The index of the output item in the response for which the code interpreter is + interpreting code. + """ sequence_number: int - """The sequence number of this event.""" + """The sequence number of this event, used to order streaming events.""" type: Literal["response.code_interpreter_call.interpreting"] """The type of the event. Always `response.code_interpreter_call.interpreting`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call.py b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call.py index 762542f3..25793711 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call.py +++ b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call.py @@ -6,50 +6,50 @@ from ..._utils import PropertyInfo from ..._models import BaseModel -__all__ = ["ResponseCodeInterpreterToolCall", "Result", "ResultLogs", "ResultFiles", "ResultFilesFile"] +__all__ = ["ResponseCodeInterpreterToolCall", "Output", "OutputLogs", "OutputImage"] -class ResultLogs(BaseModel): +class OutputLogs(BaseModel): logs: str - """The logs of the code interpreter tool call.""" + """The logs output from the code interpreter.""" type: Literal["logs"] - """The type of the code interpreter text output. Always `logs`.""" + """The type of the output. Always 'logs'.""" -class ResultFilesFile(BaseModel): - file_id: str - """The ID of the file.""" +class OutputImage(BaseModel): + type: Literal["image"] + """The type of the output. Always 'image'.""" - mime_type: str - """The MIME type of the file.""" + url: str + """The URL of the image output from the code interpreter.""" -class ResultFiles(BaseModel): - files: List[ResultFilesFile] - - type: Literal["files"] - """The type of the code interpreter file output. Always `files`.""" - - -Result: TypeAlias = Annotated[Union[ResultLogs, ResultFiles], PropertyInfo(discriminator="type")] +Output: TypeAlias = Annotated[Union[OutputLogs, OutputImage], PropertyInfo(discriminator="type")] class ResponseCodeInterpreterToolCall(BaseModel): id: str """The unique ID of the code interpreter tool call.""" - code: str - """The code to run.""" + code: Optional[str] = None + """The code to run, or null if not available.""" + + container_id: str + """The ID of the container used to run the code.""" - results: List[Result] - """The results of the code interpreter tool call.""" + outputs: Optional[List[Output]] = None + """The outputs generated by the code interpreter, such as logs or images. - status: Literal["in_progress", "interpreting", "completed"] - """The status of the code interpreter tool call.""" + Can be null if no outputs are available. + """ + + status: Literal["in_progress", "completed", "incomplete", "interpreting", "failed"] + """The status of the code interpreter tool call. + + Valid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and + `failed`. + """ type: Literal["code_interpreter_call"] """The type of the code interpreter tool call. Always `code_interpreter_call`.""" - - container_id: Optional[str] = None - """The ID of the container used to run the code.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call_param.py b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call_param.py index be0f909a..43509100 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_code_interpreter_tool_call_param.py @@ -2,53 +2,53 @@ from __future__ import annotations -from typing import Union, Iterable +from typing import Union, Iterable, Optional from typing_extensions import Literal, Required, TypeAlias, TypedDict -__all__ = ["ResponseCodeInterpreterToolCallParam", "Result", "ResultLogs", "ResultFiles", "ResultFilesFile"] +__all__ = ["ResponseCodeInterpreterToolCallParam", "Output", "OutputLogs", "OutputImage"] -class ResultLogs(TypedDict, total=False): +class OutputLogs(TypedDict, total=False): logs: Required[str] - """The logs of the code interpreter tool call.""" + """The logs output from the code interpreter.""" type: Required[Literal["logs"]] - """The type of the code interpreter text output. Always `logs`.""" + """The type of the output. Always 'logs'.""" -class ResultFilesFile(TypedDict, total=False): - file_id: Required[str] - """The ID of the file.""" +class OutputImage(TypedDict, total=False): + type: Required[Literal["image"]] + """The type of the output. Always 'image'.""" - mime_type: Required[str] - """The MIME type of the file.""" + url: Required[str] + """The URL of the image output from the code interpreter.""" -class ResultFiles(TypedDict, total=False): - files: Required[Iterable[ResultFilesFile]] - - type: Required[Literal["files"]] - """The type of the code interpreter file output. Always `files`.""" - - -Result: TypeAlias = Union[ResultLogs, ResultFiles] +Output: TypeAlias = Union[OutputLogs, OutputImage] class ResponseCodeInterpreterToolCallParam(TypedDict, total=False): id: Required[str] """The unique ID of the code interpreter tool call.""" - code: Required[str] - """The code to run.""" + code: Required[Optional[str]] + """The code to run, or null if not available.""" + + container_id: Required[str] + """The ID of the container used to run the code.""" - results: Required[Iterable[Result]] - """The results of the code interpreter tool call.""" + outputs: Required[Optional[Iterable[Output]]] + """The outputs generated by the code interpreter, such as logs or images. - status: Required[Literal["in_progress", "interpreting", "completed"]] - """The status of the code interpreter tool call.""" + Can be null if no outputs are available. + """ + + status: Required[Literal["in_progress", "completed", "incomplete", "interpreting", "failed"]] + """The status of the code interpreter tool call. + + Valid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and + `failed`. + """ type: Required[Literal["code_interpreter_call"]] """The type of the code interpreter tool call. Always `code_interpreter_call`.""" - - container_id: str - """The ID of the container used to run the code.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_create_params.py b/portkey_ai/_vendor/openai/types/responses/response_create_params.py index 1abc2ccb..ea91fa12 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_create_params.py +++ b/portkey_ai/_vendor/openai/types/responses/response_create_params.py @@ -9,15 +9,20 @@ from .response_includable import ResponseIncludable from .tool_choice_options import ToolChoiceOptions from .response_input_param import ResponseInputParam +from .response_prompt_param import ResponsePromptParam +from .tool_choice_mcp_param import ToolChoiceMcpParam from ..shared_params.metadata import Metadata from .tool_choice_types_param import ToolChoiceTypesParam from ..shared_params.reasoning import Reasoning +from .tool_choice_custom_param import ToolChoiceCustomParam +from .tool_choice_allowed_param import ToolChoiceAllowedParam from .response_text_config_param import ResponseTextConfigParam from .tool_choice_function_param import ToolChoiceFunctionParam from ..shared_params.responses_model import ResponsesModel __all__ = [ "ResponseCreateParamsBase", + "StreamOptions", "ToolChoice", "ResponseCreateParamsNonStreaming", "ResponseCreateParamsStreaming", @@ -25,30 +30,9 @@ class ResponseCreateParamsBase(TypedDict, total=False): - input: Required[Union[str, ResponseInputParam]] - """Text, image, or file inputs to the model, used to generate a response. - - Learn more: - - - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) - - [Image inputs](https://platform.openai.com/docs/guides/images) - - [File inputs](https://platform.openai.com/docs/guides/pdf-files) - - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) - - [Function calling](https://platform.openai.com/docs/guides/function-calling) - """ - - model: Required[ResponsesModel] - """Model ID used to generate the response, like `gpt-4o` or `o3`. - - OpenAI offers a wide range of models with different capabilities, performance - characteristics, and price points. Refer to the - [model guide](https://platform.openai.com/docs/models) to browse and compare - available models. - """ - background: Optional[bool] - """Whether to run the model response in the background. - + """ + Whether to run the model response in the background. [Learn more](https://platform.openai.com/docs/guides/background). """ @@ -57,24 +41,35 @@ class ResponseCreateParamsBase(TypedDict, total=False): Currently supported values are: + - `code_interpreter_call.outputs`: Includes the outputs of python code execution + in code interpreter tool call items. + - `computer_call_output.output.image_url`: Include image urls from the computer + call output. - `file_search_call.results`: Include the search results of the file search tool call. - `message.input_image.image_url`: Include image urls from the input message. - - `computer_call_output.output.image_url`: Include image urls from the computer - call output. + - `message.output_text.logprobs`: Include logprobs with assistant messages. - `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in reasoning item outputs. This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly (like when the `store` parameter is set to `false`, or when an organization is enrolled in the zero data retention program). - - `code_interpreter_call.outputs`: Includes the outputs of python code execution - in code interpreter tool call items. """ - instructions: Optional[str] + input: Union[str, ResponseInputParam] + """Text, image, or file inputs to the model, used to generate a response. + + Learn more: + + - [Text inputs and outputs](https://platform.openai.com/docs/guides/text) + - [Image inputs](https://platform.openai.com/docs/guides/images) + - [File inputs](https://platform.openai.com/docs/guides/pdf-files) + - [Conversation state](https://platform.openai.com/docs/guides/conversation-state) + - [Function calling](https://platform.openai.com/docs/guides/function-calling) """ - Inserts a system (or developer) message as the first item in the model's - context. + + instructions: Optional[str] + """A system (or developer) message inserted into the model's context. When using along with `previous_response_id`, the instructions from a previous response will not be carried over to the next response. This makes it simple to @@ -88,6 +83,14 @@ class ResponseCreateParamsBase(TypedDict, total=False): [reasoning tokens](https://platform.openai.com/docs/guides/reasoning). """ + max_tool_calls: Optional[int] + """ + The maximum number of total calls to built-in tools that can be processed in a + response. This maximum number applies across all built-in tool calls, not per + individual tool. Any further attempts to call a tool by the model will be + ignored. + """ + metadata: Optional[Metadata] """Set of 16 key-value pairs that can be attached to an object. @@ -98,6 +101,15 @@ class ResponseCreateParamsBase(TypedDict, total=False): a maximum length of 512 characters. """ + model: ResponsesModel + """Model ID used to generate the response, like `gpt-4o` or `o3`. + + OpenAI offers a wide range of models with different capabilities, performance + characteristics, and price points. Refer to the + [model guide](https://platform.openai.com/docs/models) to browse and compare + available models. + """ + parallel_tool_calls: Optional[bool] """Whether to allow the model to run tool calls in parallel.""" @@ -108,6 +120,19 @@ class ResponseCreateParamsBase(TypedDict, total=False): [conversation state](https://platform.openai.com/docs/guides/conversation-state). """ + prompt: Optional[ResponsePromptParam] + """Reference to a prompt template and its variables. + + [Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts). + """ + + prompt_cache_key: str + """ + Used by OpenAI to cache responses for similar requests to optimize your cache + hit rates. Replaces the `user` field. + [Learn more](https://platform.openai.com/docs/guides/prompt-caching). + """ + reasoning: Optional[Reasoning] """**o-series models only** @@ -115,30 +140,41 @@ class ResponseCreateParamsBase(TypedDict, total=False): [reasoning models](https://platform.openai.com/docs/guides/reasoning). """ - service_tier: Optional[Literal["auto", "default", "flex"]] - """Specifies the latency tier to use for processing the request. - - This parameter is relevant for customers subscribed to the scale tier service: + safety_identifier: str + """ + A stable identifier used to help detect users of your application that may be + violating OpenAI's usage policies. The IDs should be a string that uniquely + identifies each user. We recommend hashing their username or email address, in + order to avoid sending us any identifying information. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + """ - - If set to 'auto', and the Project is Scale tier enabled, the system will - utilize scale tier credits until they are exhausted. - - If set to 'auto', and the Project is not Scale tier enabled, the request will - be processed using the default service tier with a lower uptime SLA and no - latency guarantee. - - If set to 'default', the request will be processed using the default service - tier with a lower uptime SLA and no latency guarantee. - - If set to 'flex', the request will be processed with the Flex Processing - service tier. - [Learn more](https://platform.openai.com/docs/guides/flex-processing). + service_tier: Optional[Literal["auto", "default", "flex", "scale", "priority"]] + """Specifies the processing type used for serving the request. + + - If set to 'auto', then the request will be processed with the service tier + configured in the Project settings. Unless otherwise configured, the Project + will use 'default'. + - If set to 'default', then the request will be processed with the standard + pricing and performance for the selected model. + - If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or + 'priority', then the request will be processed with the corresponding service + tier. [Contact sales](https://openai.com/contact-sales) to learn more about + Priority processing. - When not set, the default behavior is 'auto'. - When this parameter is set, the response body will include the `service_tier` - utilized. + When the `service_tier` parameter is set, the response body will include the + `service_tier` value based on the processing mode actually used to serve the + request. This response value may be different from the value set in the + parameter. """ store: Optional[bool] """Whether to store the generated model response for later retrieval via API.""" + stream_options: Optional[StreamOptions] + """Options for streaming responses. Only set this when you set `stream: true`.""" + temperature: Optional[float] """What sampling temperature to use, between 0 and 2. @@ -177,8 +213,16 @@ class ResponseCreateParamsBase(TypedDict, total=False): Learn more about [built-in tools](https://platform.openai.com/docs/guides/tools). - **Function calls (custom tools)**: Functions that are defined by you, enabling - the model to call your own code. Learn more about + the model to call your own code with strongly typed arguments and outputs. + Learn more about [function calling](https://platform.openai.com/docs/guides/function-calling). + You can also use custom tools to call your own code. + """ + + top_logprobs: Optional[int] + """ + An integer between 0 and 20 specifying the number of most likely tokens to + return at each token position, each with an associated log probability. """ top_p: Optional[float] @@ -201,15 +245,36 @@ class ResponseCreateParamsBase(TypedDict, total=False): """ user: str - """A stable identifier for your end-users. + """This field is being replaced by `safety_identifier` and `prompt_cache_key`. + + Use `prompt_cache_key` instead to maintain caching optimizations. A stable + identifier for your end-users. Used to boost cache hit rates by better bucketing + similar requests and to help OpenAI detect and prevent abuse. + [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers). + """ + - Used to boost cache hit rates by better bucketing similar requests and to help - OpenAI detect and prevent abuse. - [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids). +class StreamOptions(TypedDict, total=False): + include_obfuscation: bool + """When true, stream obfuscation will be enabled. + + Stream obfuscation adds random characters to an `obfuscation` field on streaming + delta events to normalize payload sizes as a mitigation to certain side-channel + attacks. These obfuscation fields are included by default, but add a small + amount of overhead to the data stream. You can set `include_obfuscation` to + false to optimize for bandwidth if you trust the network links between your + application and the OpenAI API. """ -ToolChoice: TypeAlias = Union[ToolChoiceOptions, ToolChoiceTypesParam, ToolChoiceFunctionParam] +ToolChoice: TypeAlias = Union[ + ToolChoiceOptions, + ToolChoiceAllowedParam, + ToolChoiceTypesParam, + ToolChoiceFunctionParam, + ToolChoiceMcpParam, + ToolChoiceCustomParam, +] class ResponseCreateParamsNonStreaming(ResponseCreateParamsBase, total=False): diff --git a/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call.py b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call.py new file mode 100644 index 00000000..38c650e6 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call.py @@ -0,0 +1,25 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseCustomToolCall"] + + +class ResponseCustomToolCall(BaseModel): + call_id: str + """An identifier used to map this custom tool call to a tool call output.""" + + input: str + """The input for the custom tool call generated by the model.""" + + name: str + """The name of the custom tool being called.""" + + type: Literal["custom_tool_call"] + """The type of the custom tool call. Always `custom_tool_call`.""" + + id: Optional[str] = None + """The unique ID of the custom tool call in the OpenAI platform.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_delta_event.py b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_delta_event.py new file mode 100644 index 00000000..6c33102d --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_delta_event.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseCustomToolCallInputDeltaEvent"] + + +class ResponseCustomToolCallInputDeltaEvent(BaseModel): + delta: str + """The incremental input data (delta) for the custom tool call.""" + + item_id: str + """Unique identifier for the API item associated with this event.""" + + output_index: int + """The index of the output this delta applies to.""" + + sequence_number: int + """The sequence number of this event.""" + + type: Literal["response.custom_tool_call_input.delta"] + """The event type identifier.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_done_event.py b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_done_event.py new file mode 100644 index 00000000..35a2fee2 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_input_done_event.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseCustomToolCallInputDoneEvent"] + + +class ResponseCustomToolCallInputDoneEvent(BaseModel): + input: str + """The complete input data for the custom tool call.""" + + item_id: str + """Unique identifier for the API item associated with this event.""" + + output_index: int + """The index of the output this event applies to.""" + + sequence_number: int + """The sequence number of this event.""" + + type: Literal["response.custom_tool_call_input.done"] + """The event type identifier.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output.py b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output.py new file mode 100644 index 00000000..a2b4cc30 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output.py @@ -0,0 +1,22 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseCustomToolCallOutput"] + + +class ResponseCustomToolCallOutput(BaseModel): + call_id: str + """The call ID, used to map this custom tool call output to a custom tool call.""" + + output: str + """The output from the custom tool call generated by your code.""" + + type: Literal["custom_tool_call_output"] + """The type of the custom tool call output. Always `custom_tool_call_output`.""" + + id: Optional[str] = None + """The unique ID of the custom tool call output in the OpenAI platform.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output_param.py b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output_param.py new file mode 100644 index 00000000..d52c5254 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_output_param.py @@ -0,0 +1,21 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ResponseCustomToolCallOutputParam"] + + +class ResponseCustomToolCallOutputParam(TypedDict, total=False): + call_id: Required[str] + """The call ID, used to map this custom tool call output to a custom tool call.""" + + output: Required[str] + """The output from the custom tool call generated by your code.""" + + type: Required[Literal["custom_tool_call_output"]] + """The type of the custom tool call output. Always `custom_tool_call_output`.""" + + id: str + """The unique ID of the custom tool call output in the OpenAI platform.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_param.py b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_param.py new file mode 100644 index 00000000..e15beac2 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_custom_tool_call_param.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ResponseCustomToolCallParam"] + + +class ResponseCustomToolCallParam(TypedDict, total=False): + call_id: Required[str] + """An identifier used to map this custom tool call to a tool call output.""" + + input: Required[str] + """The input for the custom tool call generated by the model.""" + + name: Required[str] + """The name of the custom tool being called.""" + + type: Required[Literal["custom_tool_call"]] + """The type of the custom tool call. Always `custom_tool_call`.""" + + id: str + """The unique ID of the custom tool call in the OpenAI platform.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_function_web_search.py b/portkey_ai/_vendor/openai/types/responses/response_function_web_search.py index 44734b68..a3252956 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_function_web_search.py +++ b/portkey_ai/_vendor/openai/types/responses/response_function_web_search.py @@ -1,16 +1,54 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing_extensions import Literal +from typing import Union +from typing_extensions import Literal, Annotated, TypeAlias +from ..._utils import PropertyInfo from ..._models import BaseModel -__all__ = ["ResponseFunctionWebSearch"] +__all__ = ["ResponseFunctionWebSearch", "Action", "ActionSearch", "ActionOpenPage", "ActionFind"] + + +class ActionSearch(BaseModel): + query: str + """The search query.""" + + type: Literal["search"] + """The action type.""" + + +class ActionOpenPage(BaseModel): + type: Literal["open_page"] + """The action type.""" + + url: str + """The URL opened by the model.""" + + +class ActionFind(BaseModel): + pattern: str + """The pattern or text to search for within the page.""" + + type: Literal["find"] + """The action type.""" + + url: str + """The URL of the page searched for the pattern.""" + + +Action: TypeAlias = Annotated[Union[ActionSearch, ActionOpenPage, ActionFind], PropertyInfo(discriminator="type")] class ResponseFunctionWebSearch(BaseModel): id: str """The unique ID of the web search tool call.""" + action: Action + """ + An object describing the specific action taken in this web search call. Includes + details on how the model used the web (search, open_page, find). + """ + status: Literal["in_progress", "searching", "completed", "failed"] """The status of the web search tool call.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_function_web_search_param.py b/portkey_ai/_vendor/openai/types/responses/response_function_web_search_param.py index d413e60b..4a06132c 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_function_web_search_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_function_web_search_param.py @@ -2,15 +2,52 @@ from __future__ import annotations -from typing_extensions import Literal, Required, TypedDict +from typing import Union +from typing_extensions import Literal, Required, TypeAlias, TypedDict -__all__ = ["ResponseFunctionWebSearchParam"] +__all__ = ["ResponseFunctionWebSearchParam", "Action", "ActionSearch", "ActionOpenPage", "ActionFind"] + + +class ActionSearch(TypedDict, total=False): + query: Required[str] + """The search query.""" + + type: Required[Literal["search"]] + """The action type.""" + + +class ActionOpenPage(TypedDict, total=False): + type: Required[Literal["open_page"]] + """The action type.""" + + url: Required[str] + """The URL opened by the model.""" + + +class ActionFind(TypedDict, total=False): + pattern: Required[str] + """The pattern or text to search for within the page.""" + + type: Required[Literal["find"]] + """The action type.""" + + url: Required[str] + """The URL of the page searched for the pattern.""" + + +Action: TypeAlias = Union[ActionSearch, ActionOpenPage, ActionFind] class ResponseFunctionWebSearchParam(TypedDict, total=False): id: Required[str] """The unique ID of the web search tool call.""" + action: Required[Action] + """ + An object describing the specific action taken in this web search call. Includes + details on how the model used the web (search, open_page, find). + """ + status: Required[Literal["in_progress", "searching", "completed", "failed"]] """The status of the web search tool call.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_includable.py b/portkey_ai/_vendor/openai/types/responses/response_includable.py index 28869832..c17a0256 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_includable.py +++ b/portkey_ai/_vendor/openai/types/responses/response_includable.py @@ -5,9 +5,10 @@ __all__ = ["ResponseIncludable"] ResponseIncludable: TypeAlias = Literal[ + "code_interpreter_call.outputs", + "computer_call_output.output.image_url", "file_search_call.results", "message.input_image.image_url", - "computer_call_output.output.image_url", + "message.output_text.logprobs", "reasoning.encrypted_content", - "code_interpreter_call.outputs", ] diff --git a/portkey_ai/_vendor/openai/types/responses/response_input_file.py b/portkey_ai/_vendor/openai/types/responses/response_input_file.py index 00b35dc8..1eecd6a2 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_input_file.py +++ b/portkey_ai/_vendor/openai/types/responses/response_input_file.py @@ -18,5 +18,8 @@ class ResponseInputFile(BaseModel): file_id: Optional[str] = None """The ID of the file to be sent to the model.""" + file_url: Optional[str] = None + """The URL of the file to be sent to the model.""" + filename: Optional[str] = None """The name of the file to be sent to the model.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_input_file_param.py b/portkey_ai/_vendor/openai/types/responses/response_input_file_param.py index 61ae46f0..0b5f513e 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_input_file_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_input_file_param.py @@ -18,5 +18,8 @@ class ResponseInputFileParam(TypedDict, total=False): file_id: Optional[str] """The ID of the file to be sent to the model.""" + file_url: str + """The URL of the file to be sent to the model.""" + filename: str """The name of the file to be sent to the model.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_input_item.py b/portkey_ai/_vendor/openai/types/responses/response_input_item.py new file mode 100644 index 00000000..d2b454fd --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_input_item.py @@ -0,0 +1,309 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Dict, List, Union, Optional +from typing_extensions import Literal, Annotated, TypeAlias + +from ..._utils import PropertyInfo +from ..._models import BaseModel +from .easy_input_message import EasyInputMessage +from .response_output_message import ResponseOutputMessage +from .response_reasoning_item import ResponseReasoningItem +from .response_custom_tool_call import ResponseCustomToolCall +from .response_computer_tool_call import ResponseComputerToolCall +from .response_function_tool_call import ResponseFunctionToolCall +from .response_function_web_search import ResponseFunctionWebSearch +from .response_file_search_tool_call import ResponseFileSearchToolCall +from .response_custom_tool_call_output import ResponseCustomToolCallOutput +from .response_code_interpreter_tool_call import ResponseCodeInterpreterToolCall +from .response_input_message_content_list import ResponseInputMessageContentList +from .response_computer_tool_call_output_screenshot import ResponseComputerToolCallOutputScreenshot + +__all__ = [ + "ResponseInputItem", + "Message", + "ComputerCallOutput", + "ComputerCallOutputAcknowledgedSafetyCheck", + "FunctionCallOutput", + "ImageGenerationCall", + "LocalShellCall", + "LocalShellCallAction", + "LocalShellCallOutput", + "McpListTools", + "McpListToolsTool", + "McpApprovalRequest", + "McpApprovalResponse", + "McpCall", + "ItemReference", +] + + +class Message(BaseModel): + content: ResponseInputMessageContentList + """ + A list of one or many input items to the model, containing different content + types. + """ + + role: Literal["user", "system", "developer"] + """The role of the message input. One of `user`, `system`, or `developer`.""" + + status: Optional[Literal["in_progress", "completed", "incomplete"]] = None + """The status of item. + + One of `in_progress`, `completed`, or `incomplete`. Populated when items are + returned via API. + """ + + type: Optional[Literal["message"]] = None + """The type of the message input. Always set to `message`.""" + + +class ComputerCallOutputAcknowledgedSafetyCheck(BaseModel): + id: str + """The ID of the pending safety check.""" + + code: Optional[str] = None + """The type of the pending safety check.""" + + message: Optional[str] = None + """Details about the pending safety check.""" + + +class ComputerCallOutput(BaseModel): + call_id: str + """The ID of the computer tool call that produced the output.""" + + output: ResponseComputerToolCallOutputScreenshot + """A computer screenshot image used with the computer use tool.""" + + type: Literal["computer_call_output"] + """The type of the computer tool call output. Always `computer_call_output`.""" + + id: Optional[str] = None + """The ID of the computer tool call output.""" + + acknowledged_safety_checks: Optional[List[ComputerCallOutputAcknowledgedSafetyCheck]] = None + """ + The safety checks reported by the API that have been acknowledged by the + developer. + """ + + status: Optional[Literal["in_progress", "completed", "incomplete"]] = None + """The status of the message input. + + One of `in_progress`, `completed`, or `incomplete`. Populated when input items + are returned via API. + """ + + +class FunctionCallOutput(BaseModel): + call_id: str + """The unique ID of the function tool call generated by the model.""" + + output: str + """A JSON string of the output of the function tool call.""" + + type: Literal["function_call_output"] + """The type of the function tool call output. Always `function_call_output`.""" + + id: Optional[str] = None + """The unique ID of the function tool call output. + + Populated when this item is returned via API. + """ + + status: Optional[Literal["in_progress", "completed", "incomplete"]] = None + """The status of the item. + + One of `in_progress`, `completed`, or `incomplete`. Populated when items are + returned via API. + """ + + +class ImageGenerationCall(BaseModel): + id: str + """The unique ID of the image generation call.""" + + result: Optional[str] = None + """The generated image encoded in base64.""" + + status: Literal["in_progress", "completed", "generating", "failed"] + """The status of the image generation call.""" + + type: Literal["image_generation_call"] + """The type of the image generation call. Always `image_generation_call`.""" + + +class LocalShellCallAction(BaseModel): + command: List[str] + """The command to run.""" + + env: Dict[str, str] + """Environment variables to set for the command.""" + + type: Literal["exec"] + """The type of the local shell action. Always `exec`.""" + + timeout_ms: Optional[int] = None + """Optional timeout in milliseconds for the command.""" + + user: Optional[str] = None + """Optional user to run the command as.""" + + working_directory: Optional[str] = None + """Optional working directory to run the command in.""" + + +class LocalShellCall(BaseModel): + id: str + """The unique ID of the local shell call.""" + + action: LocalShellCallAction + """Execute a shell command on the server.""" + + call_id: str + """The unique ID of the local shell tool call generated by the model.""" + + status: Literal["in_progress", "completed", "incomplete"] + """The status of the local shell call.""" + + type: Literal["local_shell_call"] + """The type of the local shell call. Always `local_shell_call`.""" + + +class LocalShellCallOutput(BaseModel): + id: str + """The unique ID of the local shell tool call generated by the model.""" + + output: str + """A JSON string of the output of the local shell tool call.""" + + type: Literal["local_shell_call_output"] + """The type of the local shell tool call output. Always `local_shell_call_output`.""" + + status: Optional[Literal["in_progress", "completed", "incomplete"]] = None + """The status of the item. One of `in_progress`, `completed`, or `incomplete`.""" + + +class McpListToolsTool(BaseModel): + input_schema: object + """The JSON schema describing the tool's input.""" + + name: str + """The name of the tool.""" + + annotations: Optional[object] = None + """Additional annotations about the tool.""" + + description: Optional[str] = None + """The description of the tool.""" + + +class McpListTools(BaseModel): + id: str + """The unique ID of the list.""" + + server_label: str + """The label of the MCP server.""" + + tools: List[McpListToolsTool] + """The tools available on the server.""" + + type: Literal["mcp_list_tools"] + """The type of the item. Always `mcp_list_tools`.""" + + error: Optional[str] = None + """Error message if the server could not list tools.""" + + +class McpApprovalRequest(BaseModel): + id: str + """The unique ID of the approval request.""" + + arguments: str + """A JSON string of arguments for the tool.""" + + name: str + """The name of the tool to run.""" + + server_label: str + """The label of the MCP server making the request.""" + + type: Literal["mcp_approval_request"] + """The type of the item. Always `mcp_approval_request`.""" + + +class McpApprovalResponse(BaseModel): + approval_request_id: str + """The ID of the approval request being answered.""" + + approve: bool + """Whether the request was approved.""" + + type: Literal["mcp_approval_response"] + """The type of the item. Always `mcp_approval_response`.""" + + id: Optional[str] = None + """The unique ID of the approval response""" + + reason: Optional[str] = None + """Optional reason for the decision.""" + + +class McpCall(BaseModel): + id: str + """The unique ID of the tool call.""" + + arguments: str + """A JSON string of the arguments passed to the tool.""" + + name: str + """The name of the tool that was run.""" + + server_label: str + """The label of the MCP server running the tool.""" + + type: Literal["mcp_call"] + """The type of the item. Always `mcp_call`.""" + + error: Optional[str] = None + """The error from the tool call, if any.""" + + output: Optional[str] = None + """The output from the tool call.""" + + +class ItemReference(BaseModel): + id: str + """The ID of the item to reference.""" + + type: Optional[Literal["item_reference"]] = None + """The type of item to reference. Always `item_reference`.""" + + +ResponseInputItem: TypeAlias = Annotated[ + Union[ + EasyInputMessage, + Message, + ResponseOutputMessage, + ResponseFileSearchToolCall, + ResponseComputerToolCall, + ComputerCallOutput, + ResponseFunctionWebSearch, + ResponseFunctionToolCall, + FunctionCallOutput, + ResponseReasoningItem, + ImageGenerationCall, + ResponseCodeInterpreterToolCall, + LocalShellCall, + LocalShellCallOutput, + McpListTools, + McpApprovalRequest, + McpApprovalResponse, + McpCall, + ResponseCustomToolCallOutput, + ResponseCustomToolCall, + ItemReference, + ], + PropertyInfo(discriminator="type"), +] diff --git a/portkey_ai/_vendor/openai/types/responses/response_input_item_param.py b/portkey_ai/_vendor/openai/types/responses/response_input_item_param.py index 70cd9116..0d5dbda8 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_input_item_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_input_item_param.py @@ -8,10 +8,12 @@ from .easy_input_message_param import EasyInputMessageParam from .response_output_message_param import ResponseOutputMessageParam from .response_reasoning_item_param import ResponseReasoningItemParam +from .response_custom_tool_call_param import ResponseCustomToolCallParam from .response_computer_tool_call_param import ResponseComputerToolCallParam from .response_function_tool_call_param import ResponseFunctionToolCallParam from .response_function_web_search_param import ResponseFunctionWebSearchParam from .response_file_search_tool_call_param import ResponseFileSearchToolCallParam +from .response_custom_tool_call_output_param import ResponseCustomToolCallOutputParam from .response_code_interpreter_tool_call_param import ResponseCodeInterpreterToolCallParam from .response_input_message_content_list_param import ResponseInputMessageContentListParam from .response_computer_tool_call_output_screenshot_param import ResponseComputerToolCallOutputScreenshotParam @@ -298,5 +300,7 @@ class ItemReference(TypedDict, total=False): McpApprovalRequest, McpApprovalResponse, McpCall, + ResponseCustomToolCallOutputParam, + ResponseCustomToolCallParam, ItemReference, ] diff --git a/portkey_ai/_vendor/openai/types/responses/response_input_param.py b/portkey_ai/_vendor/openai/types/responses/response_input_param.py index 02499867..6ff36a42 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_input_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_input_param.py @@ -8,10 +8,12 @@ from .easy_input_message_param import EasyInputMessageParam from .response_output_message_param import ResponseOutputMessageParam from .response_reasoning_item_param import ResponseReasoningItemParam +from .response_custom_tool_call_param import ResponseCustomToolCallParam from .response_computer_tool_call_param import ResponseComputerToolCallParam from .response_function_tool_call_param import ResponseFunctionToolCallParam from .response_function_web_search_param import ResponseFunctionWebSearchParam from .response_file_search_tool_call_param import ResponseFileSearchToolCallParam +from .response_custom_tool_call_output_param import ResponseCustomToolCallOutputParam from .response_code_interpreter_tool_call_param import ResponseCodeInterpreterToolCallParam from .response_input_message_content_list_param import ResponseInputMessageContentListParam from .response_computer_tool_call_output_screenshot_param import ResponseComputerToolCallOutputScreenshotParam @@ -299,6 +301,8 @@ class ItemReference(TypedDict, total=False): McpApprovalRequest, McpApprovalResponse, McpCall, + ResponseCustomToolCallOutputParam, + ResponseCustomToolCallParam, ItemReference, ] diff --git a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_delta_event.py b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_delta_event.py index d6651e69..54eff383 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_delta_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_delta_event.py @@ -8,8 +8,11 @@ class ResponseMcpCallArgumentsDeltaEvent(BaseModel): - delta: object - """The partial update to the arguments for the MCP tool call.""" + delta: str + """ + A JSON string containing the partial update to the arguments for the MCP tool + call. + """ item_id: str """The unique identifier of the MCP tool call item being processed.""" @@ -20,5 +23,5 @@ class ResponseMcpCallArgumentsDeltaEvent(BaseModel): sequence_number: int """The sequence number of this event.""" - type: Literal["response.mcp_call.arguments_delta"] - """The type of the event. Always 'response.mcp_call.arguments_delta'.""" + type: Literal["response.mcp_call_arguments.delta"] + """The type of the event. Always 'response.mcp_call_arguments.delta'.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_done_event.py b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_done_event.py index a7ce46ad..59ce9bc9 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_done_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_arguments_done_event.py @@ -8,8 +8,8 @@ class ResponseMcpCallArgumentsDoneEvent(BaseModel): - arguments: object - """The finalized arguments for the MCP tool call.""" + arguments: str + """A JSON string containing the finalized arguments for the MCP tool call.""" item_id: str """The unique identifier of the MCP tool call item being processed.""" @@ -20,5 +20,5 @@ class ResponseMcpCallArgumentsDoneEvent(BaseModel): sequence_number: int """The sequence number of this event.""" - type: Literal["response.mcp_call.arguments_done"] - """The type of the event. Always 'response.mcp_call.arguments_done'.""" + type: Literal["response.mcp_call_arguments.done"] + """The type of the event. Always 'response.mcp_call_arguments.done'.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_completed_event.py b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_completed_event.py index 009fbc3c..2fee5dff 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_completed_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_completed_event.py @@ -8,6 +8,12 @@ class ResponseMcpCallCompletedEvent(BaseModel): + item_id: str + """The ID of the MCP tool call item that completed.""" + + output_index: int + """The index of the output item that completed.""" + sequence_number: int """The sequence number of this event.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_failed_event.py b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_failed_event.py index e6edc6de..ca41ab71 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_mcp_call_failed_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_mcp_call_failed_event.py @@ -8,6 +8,12 @@ class ResponseMcpCallFailedEvent(BaseModel): + item_id: str + """The ID of the MCP tool call item that failed.""" + + output_index: int + """The index of the output item that failed.""" + sequence_number: int """The sequence number of this event.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_completed_event.py b/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_completed_event.py index 6290c3cf..c60ad88e 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_completed_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_completed_event.py @@ -8,6 +8,12 @@ class ResponseMcpListToolsCompletedEvent(BaseModel): + item_id: str + """The ID of the MCP tool call item that produced this output.""" + + output_index: int + """The index of the output item that was processed.""" + sequence_number: int """The sequence number of this event.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_failed_event.py b/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_failed_event.py index 1f6e325b..0c966c44 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_failed_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_failed_event.py @@ -8,6 +8,12 @@ class ResponseMcpListToolsFailedEvent(BaseModel): + item_id: str + """The ID of the MCP tool call item that failed.""" + + output_index: int + """The index of the output item that failed.""" + sequence_number: int """The sequence number of this event.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_in_progress_event.py b/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_in_progress_event.py index 236e5fe6..f451db1e 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_in_progress_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_mcp_list_tools_in_progress_event.py @@ -8,6 +8,12 @@ class ResponseMcpListToolsInProgressEvent(BaseModel): + item_id: str + """The ID of the MCP tool call item that is being processed.""" + + output_index: int + """The index of the output item that is being processed.""" + sequence_number: int """The sequence number of this event.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_output_item.py b/portkey_ai/_vendor/openai/types/responses/response_output_item.py index 62f8f6fb..2d3ee7b6 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_output_item.py +++ b/portkey_ai/_vendor/openai/types/responses/response_output_item.py @@ -7,6 +7,7 @@ from ..._models import BaseModel from .response_output_message import ResponseOutputMessage from .response_reasoning_item import ResponseReasoningItem +from .response_custom_tool_call import ResponseCustomToolCall from .response_computer_tool_call import ResponseComputerToolCall from .response_function_tool_call import ResponseFunctionToolCall from .response_function_web_search import ResponseFunctionWebSearch @@ -161,6 +162,7 @@ class McpApprovalRequest(BaseModel): McpCall, McpListTools, McpApprovalRequest, + ResponseCustomToolCall, ], PropertyInfo(discriminator="type"), ] diff --git a/portkey_ai/_vendor/openai/types/responses/response_output_refusal.py b/portkey_ai/_vendor/openai/types/responses/response_output_refusal.py index eba58107..685c8722 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_output_refusal.py +++ b/portkey_ai/_vendor/openai/types/responses/response_output_refusal.py @@ -9,7 +9,7 @@ class ResponseOutputRefusal(BaseModel): refusal: str - """The refusal explanationfrom the model.""" + """The refusal explanation from the model.""" type: Literal["refusal"] """The type of the refusal. Always `refusal`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_output_refusal_param.py b/portkey_ai/_vendor/openai/types/responses/response_output_refusal_param.py index 53140a60..54cfaf07 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_output_refusal_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_output_refusal_param.py @@ -9,7 +9,7 @@ class ResponseOutputRefusalParam(TypedDict, total=False): refusal: Required[str] - """The refusal explanationfrom the model.""" + """The refusal explanation from the model.""" type: Required[Literal["refusal"]] """The type of the refusal. Always `refusal`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_output_text.py b/portkey_ai/_vendor/openai/types/responses/response_output_text.py index 1ea9a4ba..aa97b629 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_output_text.py +++ b/portkey_ai/_vendor/openai/types/responses/response_output_text.py @@ -22,6 +22,9 @@ class AnnotationFileCitation(BaseModel): file_id: str """The ID of the file.""" + filename: str + """The filename of the file cited.""" + index: int """The index of the file in the list of files.""" @@ -56,6 +59,9 @@ class AnnotationContainerFileCitation(BaseModel): file_id: str """The ID of the file.""" + filename: str + """The filename of the container file cited.""" + start_index: int """The index of the first character of the container file citation in the message.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_output_text_annotation_added_event.py b/portkey_ai/_vendor/openai/types/responses/response_output_text_annotation_added_event.py index ce96790c..62d8f728 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_output_text_annotation_added_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_output_text_annotation_added_event.py @@ -26,5 +26,5 @@ class ResponseOutputTextAnnotationAddedEvent(BaseModel): sequence_number: int """The sequence number of this event.""" - type: Literal["response.output_text_annotation.added"] - """The type of the event. Always 'response.output_text_annotation.added'.""" + type: Literal["response.output_text.annotation.added"] + """The type of the event. Always 'response.output_text.annotation.added'.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_output_text_param.py b/portkey_ai/_vendor/openai/types/responses/response_output_text_param.py index 207901e8..63d2d394 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_output_text_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_output_text_param.py @@ -21,6 +21,9 @@ class AnnotationFileCitation(TypedDict, total=False): file_id: Required[str] """The ID of the file.""" + filename: Required[str] + """The filename of the file cited.""" + index: Required[int] """The index of the file in the list of files.""" @@ -55,6 +58,9 @@ class AnnotationContainerFileCitation(TypedDict, total=False): file_id: Required[str] """The ID of the file.""" + filename: Required[str] + """The filename of the container file cited.""" + start_index: Required[int] """The index of the first character of the container file citation in the message.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_prompt.py b/portkey_ai/_vendor/openai/types/responses/response_prompt.py new file mode 100644 index 00000000..537c2f8f --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_prompt.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Dict, Union, Optional +from typing_extensions import TypeAlias + +from ..._models import BaseModel +from .response_input_file import ResponseInputFile +from .response_input_text import ResponseInputText +from .response_input_image import ResponseInputImage + +__all__ = ["ResponsePrompt", "Variables"] + +Variables: TypeAlias = Union[str, ResponseInputText, ResponseInputImage, ResponseInputFile] + + +class ResponsePrompt(BaseModel): + id: str + """The unique identifier of the prompt template to use.""" + + variables: Optional[Dict[str, Variables]] = None + """Optional map of values to substitute in for variables in your prompt. + + The substitution values can either be strings, or other Response input types + like images or files. + """ + + version: Optional[str] = None + """Optional version of the prompt template.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_prompt_param.py b/portkey_ai/_vendor/openai/types/responses/response_prompt_param.py new file mode 100644 index 00000000..d935fa51 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_prompt_param.py @@ -0,0 +1,29 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Dict, Union, Optional +from typing_extensions import Required, TypeAlias, TypedDict + +from .response_input_file_param import ResponseInputFileParam +from .response_input_text_param import ResponseInputTextParam +from .response_input_image_param import ResponseInputImageParam + +__all__ = ["ResponsePromptParam", "Variables"] + +Variables: TypeAlias = Union[str, ResponseInputTextParam, ResponseInputImageParam, ResponseInputFileParam] + + +class ResponsePromptParam(TypedDict, total=False): + id: Required[str] + """The unique identifier of the prompt template to use.""" + + variables: Optional[Dict[str, Variables]] + """Optional map of values to substitute in for variables in your prompt. + + The substitution values can either be strings, or other Response input types + like images or files. + """ + + version: Optional[str] + """Optional version of the prompt template.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_delta_event.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_delta_event.py deleted file mode 100644 index f37d3d37..00000000 --- a/portkey_ai/_vendor/openai/types/responses/response_reasoning_delta_event.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ResponseReasoningDeltaEvent"] - - -class ResponseReasoningDeltaEvent(BaseModel): - content_index: int - """The index of the reasoning content part within the output item.""" - - delta: object - """The partial update to the reasoning content.""" - - item_id: str - """The unique identifier of the item for which reasoning is being updated.""" - - output_index: int - """The index of the output item in the response's output array.""" - - sequence_number: int - """The sequence number of this event.""" - - type: Literal["response.reasoning.delta"] - """The type of the event. Always 'response.reasoning.delta'.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_done_event.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_done_event.py deleted file mode 100644 index 9f8b127d..00000000 --- a/portkey_ai/_vendor/openai/types/responses/response_reasoning_done_event.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ResponseReasoningDoneEvent"] - - -class ResponseReasoningDoneEvent(BaseModel): - content_index: int - """The index of the reasoning content part within the output item.""" - - item_id: str - """The unique identifier of the item for which reasoning is finalized.""" - - output_index: int - """The index of the output item in the response's output array.""" - - sequence_number: int - """The sequence number of this event.""" - - text: str - """The finalized reasoning text.""" - - type: Literal["response.reasoning.done"] - """The type of the event. Always 'response.reasoning.done'.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_item.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_item.py index f5da7802..e5cb094e 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_reasoning_item.py +++ b/portkey_ai/_vendor/openai/types/responses/response_reasoning_item.py @@ -5,29 +5,38 @@ from ..._models import BaseModel -__all__ = ["ResponseReasoningItem", "Summary"] +__all__ = ["ResponseReasoningItem", "Summary", "Content"] class Summary(BaseModel): text: str - """ - A short summary of the reasoning used by the model when generating the response. - """ + """A summary of the reasoning output from the model so far.""" type: Literal["summary_text"] """The type of the object. Always `summary_text`.""" +class Content(BaseModel): + text: str + """Reasoning text output from the model.""" + + type: Literal["reasoning_text"] + """The type of the object. Always `reasoning_text`.""" + + class ResponseReasoningItem(BaseModel): id: str """The unique identifier of the reasoning content.""" summary: List[Summary] - """Reasoning text contents.""" + """Reasoning summary content.""" type: Literal["reasoning"] """The type of the object. Always `reasoning`.""" + content: Optional[List[Content]] = None + """Reasoning text content.""" + encrypted_content: Optional[str] = None """ The encrypted content of the reasoning item - populated when a response is diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_item_param.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_item_param.py index 2cfa5312..042b6c05 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_reasoning_item_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_reasoning_item_param.py @@ -5,29 +5,38 @@ from typing import Iterable, Optional from typing_extensions import Literal, Required, TypedDict -__all__ = ["ResponseReasoningItemParam", "Summary"] +__all__ = ["ResponseReasoningItemParam", "Summary", "Content"] class Summary(TypedDict, total=False): text: Required[str] - """ - A short summary of the reasoning used by the model when generating the response. - """ + """A summary of the reasoning output from the model so far.""" type: Required[Literal["summary_text"]] """The type of the object. Always `summary_text`.""" +class Content(TypedDict, total=False): + text: Required[str] + """Reasoning text output from the model.""" + + type: Required[Literal["reasoning_text"]] + """The type of the object. Always `reasoning_text`.""" + + class ResponseReasoningItemParam(TypedDict, total=False): id: Required[str] """The unique identifier of the reasoning content.""" summary: Required[Iterable[Summary]] - """Reasoning text contents.""" + """Reasoning summary content.""" type: Required[Literal["reasoning"]] """The type of the object. Always `reasoning`.""" + content: Iterable[Content] + """Reasoning text content.""" + encrypted_content: Optional[str] """ The encrypted content of the reasoning item - populated when a response is diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_delta_event.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_delta_event.py deleted file mode 100644 index 519a4f24..00000000 --- a/portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_delta_event.py +++ /dev/null @@ -1,30 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ResponseReasoningSummaryDeltaEvent"] - - -class ResponseReasoningSummaryDeltaEvent(BaseModel): - delta: object - """The partial update to the reasoning summary content.""" - - item_id: str - """ - The unique identifier of the item for which the reasoning summary is being - updated. - """ - - output_index: int - """The index of the output item in the response's output array.""" - - sequence_number: int - """The sequence number of this event.""" - - summary_index: int - """The index of the summary part within the output item.""" - - type: Literal["response.reasoning_summary.delta"] - """The type of the event. Always 'response.reasoning_summary.delta'.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_done_event.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_done_event.py deleted file mode 100644 index 98bcf9cb..00000000 --- a/portkey_ai/_vendor/openai/types/responses/response_reasoning_summary_done_event.py +++ /dev/null @@ -1,27 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing_extensions import Literal - -from ..._models import BaseModel - -__all__ = ["ResponseReasoningSummaryDoneEvent"] - - -class ResponseReasoningSummaryDoneEvent(BaseModel): - item_id: str - """The unique identifier of the item for which the reasoning summary is finalized.""" - - output_index: int - """The index of the output item in the response's output array.""" - - sequence_number: int - """The sequence number of this event.""" - - summary_index: int - """The index of the summary part within the output item.""" - - text: str - """The finalized reasoning summary text.""" - - type: Literal["response.reasoning_summary.done"] - """The type of the event. Always 'response.reasoning_summary.done'.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_text_delta_event.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_text_delta_event.py new file mode 100644 index 00000000..e1df893b --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_reasoning_text_delta_event.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseReasoningTextDeltaEvent"] + + +class ResponseReasoningTextDeltaEvent(BaseModel): + content_index: int + """The index of the reasoning content part this delta is associated with.""" + + delta: str + """The text delta that was added to the reasoning content.""" + + item_id: str + """The ID of the item this reasoning text delta is associated with.""" + + output_index: int + """The index of the output item this reasoning text delta is associated with.""" + + sequence_number: int + """The sequence number of this event.""" + + type: Literal["response.reasoning_text.delta"] + """The type of the event. Always `response.reasoning_text.delta`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_reasoning_text_done_event.py b/portkey_ai/_vendor/openai/types/responses/response_reasoning_text_done_event.py new file mode 100644 index 00000000..d22d984e --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/response_reasoning_text_done_event.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseReasoningTextDoneEvent"] + + +class ResponseReasoningTextDoneEvent(BaseModel): + content_index: int + """The index of the reasoning content part.""" + + item_id: str + """The ID of the item this reasoning text is associated with.""" + + output_index: int + """The index of the output item this reasoning text is associated with.""" + + sequence_number: int + """The sequence number of this event.""" + + text: str + """The full text of the completed reasoning content.""" + + type: Literal["response.reasoning_text.done"] + """The type of the event. Always `response.reasoning_text.done`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_retrieve_params.py b/portkey_ai/_vendor/openai/types/responses/response_retrieve_params.py index a092bd7f..4013db85 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_retrieve_params.py +++ b/portkey_ai/_vendor/openai/types/responses/response_retrieve_params.py @@ -17,6 +17,17 @@ class ResponseRetrieveParamsBase(TypedDict, total=False): See the `include` parameter for Response creation above for more information. """ + include_obfuscation: bool + """When true, stream obfuscation will be enabled. + + Stream obfuscation adds random characters to an `obfuscation` field on streaming + delta events to normalize payload sizes as a mitigation to certain side-channel + attacks. These obfuscation fields are included by default, but add a small + amount of overhead to the data stream. You can set `include_obfuscation` to + false to optimize for bandwidth if you trust the network links between your + application and the OpenAI API. + """ + starting_after: int """The sequence number of the event after which to start streaming.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_stream_event.py b/portkey_ai/_vendor/openai/types/responses/response_stream_event.py index 24a83f1a..c0a317cd 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_stream_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_stream_event.py @@ -17,21 +17,19 @@ from .response_in_progress_event import ResponseInProgressEvent from .response_refusal_done_event import ResponseRefusalDoneEvent from .response_refusal_delta_event import ResponseRefusalDeltaEvent -from .response_reasoning_done_event import ResponseReasoningDoneEvent from .response_mcp_call_failed_event import ResponseMcpCallFailedEvent -from .response_reasoning_delta_event import ResponseReasoningDeltaEvent from .response_output_item_done_event import ResponseOutputItemDoneEvent from .response_content_part_done_event import ResponseContentPartDoneEvent from .response_output_item_added_event import ResponseOutputItemAddedEvent from .response_content_part_added_event import ResponseContentPartAddedEvent from .response_mcp_call_completed_event import ResponseMcpCallCompletedEvent +from .response_reasoning_text_done_event import ResponseReasoningTextDoneEvent from .response_mcp_call_in_progress_event import ResponseMcpCallInProgressEvent +from .response_reasoning_text_delta_event import ResponseReasoningTextDeltaEvent from .response_audio_transcript_done_event import ResponseAudioTranscriptDoneEvent from .response_mcp_list_tools_failed_event import ResponseMcpListToolsFailedEvent from .response_audio_transcript_delta_event import ResponseAudioTranscriptDeltaEvent -from .response_reasoning_summary_done_event import ResponseReasoningSummaryDoneEvent from .response_mcp_call_arguments_done_event import ResponseMcpCallArgumentsDoneEvent -from .response_reasoning_summary_delta_event import ResponseReasoningSummaryDeltaEvent from .response_image_gen_call_completed_event import ResponseImageGenCallCompletedEvent from .response_mcp_call_arguments_delta_event import ResponseMcpCallArgumentsDeltaEvent from .response_mcp_list_tools_completed_event import ResponseMcpListToolsCompletedEvent @@ -42,9 +40,11 @@ from .response_file_search_call_searching_event import ResponseFileSearchCallSearchingEvent from .response_image_gen_call_in_progress_event import ResponseImageGenCallInProgressEvent from .response_mcp_list_tools_in_progress_event import ResponseMcpListToolsInProgressEvent +from .response_custom_tool_call_input_done_event import ResponseCustomToolCallInputDoneEvent from .response_reasoning_summary_part_done_event import ResponseReasoningSummaryPartDoneEvent from .response_reasoning_summary_text_done_event import ResponseReasoningSummaryTextDoneEvent from .response_web_search_call_in_progress_event import ResponseWebSearchCallInProgressEvent +from .response_custom_tool_call_input_delta_event import ResponseCustomToolCallInputDeltaEvent from .response_file_search_call_in_progress_event import ResponseFileSearchCallInProgressEvent from .response_function_call_arguments_done_event import ResponseFunctionCallArgumentsDoneEvent from .response_image_gen_call_partial_image_event import ResponseImageGenCallPartialImageEvent @@ -90,6 +90,8 @@ ResponseReasoningSummaryPartDoneEvent, ResponseReasoningSummaryTextDeltaEvent, ResponseReasoningSummaryTextDoneEvent, + ResponseReasoningTextDeltaEvent, + ResponseReasoningTextDoneEvent, ResponseRefusalDeltaEvent, ResponseRefusalDoneEvent, ResponseTextDeltaEvent, @@ -111,10 +113,8 @@ ResponseMcpListToolsInProgressEvent, ResponseOutputTextAnnotationAddedEvent, ResponseQueuedEvent, - ResponseReasoningDeltaEvent, - ResponseReasoningDoneEvent, - ResponseReasoningSummaryDeltaEvent, - ResponseReasoningSummaryDoneEvent, + ResponseCustomToolCallInputDeltaEvent, + ResponseCustomToolCallInputDoneEvent, ], PropertyInfo(discriminator="type"), ] diff --git a/portkey_ai/_vendor/openai/types/responses/response_text_config.py b/portkey_ai/_vendor/openai/types/responses/response_text_config.py index a1894a91..c53546da 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_text_config.py +++ b/portkey_ai/_vendor/openai/types/responses/response_text_config.py @@ -1,6 +1,7 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from typing import Optional +from typing_extensions import Literal from ..._models import BaseModel from .response_format_text_config import ResponseFormatTextConfig @@ -24,3 +25,11 @@ class ResponseTextConfig(BaseModel): ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. """ + + verbosity: Optional[Literal["low", "medium", "high"]] = None + """Constrains the verbosity of the model's response. + + Lower values will result in more concise responses, while higher values will + result in more verbose responses. Currently supported values are `low`, + `medium`, and `high`. + """ diff --git a/portkey_ai/_vendor/openai/types/responses/response_text_config_param.py b/portkey_ai/_vendor/openai/types/responses/response_text_config_param.py index aec064bf..1229fce3 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_text_config_param.py +++ b/portkey_ai/_vendor/openai/types/responses/response_text_config_param.py @@ -2,7 +2,8 @@ from __future__ import annotations -from typing_extensions import TypedDict +from typing import Optional +from typing_extensions import Literal, TypedDict from .response_format_text_config_param import ResponseFormatTextConfigParam @@ -25,3 +26,11 @@ class ResponseTextConfigParam(TypedDict, total=False): ensures the message the model generates is valid JSON. Using `json_schema` is preferred for models that support it. """ + + verbosity: Optional[Literal["low", "medium", "high"]] + """Constrains the verbosity of the model's response. + + Lower values will result in more concise responses, while higher values will + result in more verbose responses. Currently supported values are `low`, + `medium`, and `high`. + """ diff --git a/portkey_ai/_vendor/openai/types/responses/response_text_delta_event.py b/portkey_ai/_vendor/openai/types/responses/response_text_delta_event.py index 7e4aec70..b5379b7a 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_text_delta_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_text_delta_event.py @@ -1,10 +1,30 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +from typing import List, Optional from typing_extensions import Literal from ..._models import BaseModel -__all__ = ["ResponseTextDeltaEvent"] +__all__ = ["ResponseTextDeltaEvent", "Logprob", "LogprobTopLogprob"] + + +class LogprobTopLogprob(BaseModel): + token: Optional[str] = None + """A possible text token.""" + + logprob: Optional[float] = None + """The log probability of this token.""" + + +class Logprob(BaseModel): + token: str + """A possible text token.""" + + logprob: float + """The log probability of this token.""" + + top_logprobs: Optional[List[LogprobTopLogprob]] = None + """The log probability of the top 20 most likely tokens.""" class ResponseTextDeltaEvent(BaseModel): @@ -17,6 +37,9 @@ class ResponseTextDeltaEvent(BaseModel): item_id: str """The ID of the output item that the text delta was added to.""" + logprobs: List[Logprob] + """The log probabilities of the tokens in the delta.""" + output_index: int """The index of the output item that the text delta was added to.""" diff --git a/portkey_ai/_vendor/openai/types/responses/response_text_done_event.py b/portkey_ai/_vendor/openai/types/responses/response_text_done_event.py index 0d5ed4dd..d9776a18 100644 --- a/portkey_ai/_vendor/openai/types/responses/response_text_done_event.py +++ b/portkey_ai/_vendor/openai/types/responses/response_text_done_event.py @@ -1,10 +1,30 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +from typing import List, Optional from typing_extensions import Literal from ..._models import BaseModel -__all__ = ["ResponseTextDoneEvent"] +__all__ = ["ResponseTextDoneEvent", "Logprob", "LogprobTopLogprob"] + + +class LogprobTopLogprob(BaseModel): + token: Optional[str] = None + """A possible text token.""" + + logprob: Optional[float] = None + """The log probability of this token.""" + + +class Logprob(BaseModel): + token: str + """A possible text token.""" + + logprob: float + """The log probability of this token.""" + + top_logprobs: Optional[List[LogprobTopLogprob]] = None + """The log probability of the top 20 most likely tokens.""" class ResponseTextDoneEvent(BaseModel): @@ -14,6 +34,9 @@ class ResponseTextDoneEvent(BaseModel): item_id: str """The ID of the output item that the text content is finalized.""" + logprobs: List[Logprob] + """The log probabilities of the tokens in the delta.""" + output_index: int """The index of the output item that the text content is finalized.""" diff --git a/portkey_ai/_vendor/openai/types/responses/tool.py b/portkey_ai/_vendor/openai/types/responses/tool.py index 904c474e..455ba016 100644 --- a/portkey_ai/_vendor/openai/types/responses/tool.py +++ b/portkey_ai/_vendor/openai/types/responses/tool.py @@ -5,6 +5,7 @@ from ..._utils import PropertyInfo from ..._models import BaseModel +from .custom_tool import CustomTool from .computer_tool import ComputerTool from .function_tool import FunctionTool from .web_search_tool import WebSearchTool @@ -79,6 +80,9 @@ class Mcp(BaseModel): require_approval: Optional[McpRequireApproval] = None """Specify which of the MCP server's tools require approval.""" + server_description: Optional[str] = None + """Optional description of the MCP server, used to provide more context.""" + class CodeInterpreterContainerCodeInterpreterToolAuto(BaseModel): type: Literal["auto"] @@ -121,6 +125,13 @@ class ImageGeneration(BaseModel): One of `transparent`, `opaque`, or `auto`. Default: `auto`. """ + input_fidelity: Optional[Literal["high", "low"]] = None + """ + Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + """ + input_image_mask: Optional[ImageGenerationInputImageMask] = None """Optional mask for inpainting. @@ -167,6 +178,16 @@ class LocalShell(BaseModel): Tool: TypeAlias = Annotated[ - Union[FunctionTool, FileSearchTool, WebSearchTool, ComputerTool, Mcp, CodeInterpreter, ImageGeneration, LocalShell], + Union[ + FunctionTool, + FileSearchTool, + WebSearchTool, + ComputerTool, + Mcp, + CodeInterpreter, + ImageGeneration, + LocalShell, + CustomTool, + ], PropertyInfo(discriminator="type"), ] diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_allowed.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_allowed.py new file mode 100644 index 00000000..d7921dcb --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_allowed.py @@ -0,0 +1,36 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Dict, List +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ToolChoiceAllowed"] + + +class ToolChoiceAllowed(BaseModel): + mode: Literal["auto", "required"] + """Constrains the tools available to the model to a pre-defined set. + + `auto` allows the model to pick from among the allowed tools and generate a + message. + + `required` requires the model to call one or more of the allowed tools. + """ + + tools: List[Dict[str, object]] + """A list of tool definitions that the model should be allowed to call. + + For the Responses API, the list of tool definitions might look like: + + ```json + [ + { "type": "function", "name": "get_weather" }, + { "type": "mcp", "server_label": "deepwiki" }, + { "type": "image_generation" } + ] + ``` + """ + + type: Literal["allowed_tools"] + """Allowed tool configuration type. Always `allowed_tools`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_allowed_param.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_allowed_param.py new file mode 100644 index 00000000..0712cab4 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_allowed_param.py @@ -0,0 +1,36 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Dict, Iterable +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ToolChoiceAllowedParam"] + + +class ToolChoiceAllowedParam(TypedDict, total=False): + mode: Required[Literal["auto", "required"]] + """Constrains the tools available to the model to a pre-defined set. + + `auto` allows the model to pick from among the allowed tools and generate a + message. + + `required` requires the model to call one or more of the allowed tools. + """ + + tools: Required[Iterable[Dict[str, object]]] + """A list of tool definitions that the model should be allowed to call. + + For the Responses API, the list of tool definitions might look like: + + ```json + [ + { "type": "function", "name": "get_weather" }, + { "type": "mcp", "server_label": "deepwiki" }, + { "type": "image_generation" } + ] + ``` + """ + + type: Required[Literal["allowed_tools"]] + """Allowed tool configuration type. Always `allowed_tools`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_custom.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_custom.py new file mode 100644 index 00000000..d600e536 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_custom.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ToolChoiceCustom"] + + +class ToolChoiceCustom(BaseModel): + name: str + """The name of the custom tool to call.""" + + type: Literal["custom"] + """For custom tool calling, the type is always `custom`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_custom_param.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_custom_param.py new file mode 100644 index 00000000..55bc53b7 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_custom_param.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ToolChoiceCustomParam"] + + +class ToolChoiceCustomParam(TypedDict, total=False): + name: Required[str] + """The name of the custom tool to call.""" + + type: Required[Literal["custom"]] + """For custom tool calling, the type is always `custom`.""" diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_mcp.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_mcp.py new file mode 100644 index 00000000..8763d816 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_mcp.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ToolChoiceMcp"] + + +class ToolChoiceMcp(BaseModel): + server_label: str + """The label of the MCP server to use.""" + + type: Literal["mcp"] + """For MCP tools, the type is always `mcp`.""" + + name: Optional[str] = None + """The name of the tool to call on the server.""" diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_mcp_param.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_mcp_param.py new file mode 100644 index 00000000..afcceb8c --- /dev/null +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_mcp_param.py @@ -0,0 +1,19 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ToolChoiceMcpParam"] + + +class ToolChoiceMcpParam(TypedDict, total=False): + server_label: Required[str] + """The label of the MCP server to use.""" + + type: Required[Literal["mcp"]] + """For MCP tools, the type is always `mcp`.""" + + name: Optional[str] + """The name of the tool to call on the server.""" diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_types.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_types.py index b9683243..b31a8260 100644 --- a/portkey_ai/_vendor/openai/types/responses/tool_choice_types.py +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_types.py @@ -15,7 +15,6 @@ class ToolChoiceTypes(BaseModel): "web_search_preview_2025_03_11", "image_generation", "code_interpreter", - "mcp", ] """The type of hosted tool the model should to use. @@ -28,6 +27,5 @@ class ToolChoiceTypes(BaseModel): - `web_search_preview` - `computer_use_preview` - `code_interpreter` - - `mcp` - `image_generation` """ diff --git a/portkey_ai/_vendor/openai/types/responses/tool_choice_types_param.py b/portkey_ai/_vendor/openai/types/responses/tool_choice_types_param.py index 17590075..15e03574 100644 --- a/portkey_ai/_vendor/openai/types/responses/tool_choice_types_param.py +++ b/portkey_ai/_vendor/openai/types/responses/tool_choice_types_param.py @@ -16,7 +16,6 @@ class ToolChoiceTypesParam(TypedDict, total=False): "web_search_preview_2025_03_11", "image_generation", "code_interpreter", - "mcp", ] ] """The type of hosted tool the model should to use. @@ -30,6 +29,5 @@ class ToolChoiceTypesParam(TypedDict, total=False): - `web_search_preview` - `computer_use_preview` - `code_interpreter` - - `mcp` - `image_generation` """ diff --git a/portkey_ai/_vendor/openai/types/responses/tool_param.py b/portkey_ai/_vendor/openai/types/responses/tool_param.py index 4174560d..f91e7585 100644 --- a/portkey_ai/_vendor/openai/types/responses/tool_param.py +++ b/portkey_ai/_vendor/openai/types/responses/tool_param.py @@ -5,11 +5,12 @@ from typing import Dict, List, Union, Optional from typing_extensions import Literal, Required, TypeAlias, TypedDict +from ..chat import ChatCompletionFunctionToolParam +from .custom_tool_param import CustomToolParam from .computer_tool_param import ComputerToolParam from .function_tool_param import FunctionToolParam from .web_search_tool_param import WebSearchToolParam from .file_search_tool_param import FileSearchToolParam -from ..chat.chat_completion_tool_param import ChatCompletionToolParam __all__ = [ "ToolParam", @@ -80,6 +81,9 @@ class Mcp(TypedDict, total=False): require_approval: Optional[McpRequireApproval] """Specify which of the MCP server's tools require approval.""" + server_description: str + """Optional description of the MCP server, used to provide more context.""" + class CodeInterpreterContainerCodeInterpreterToolAuto(TypedDict, total=False): type: Required[Literal["auto"]] @@ -122,6 +126,13 @@ class ImageGeneration(TypedDict, total=False): One of `transparent`, `opaque`, or `auto`. Default: `auto`. """ + input_fidelity: Optional[Literal["high", "low"]] + """ + Control how much effort the model will exert to match the style and features, + especially facial features, of input images. This parameter is only supported + for `gpt-image-1`. Supports `high` and `low`. Defaults to `low`. + """ + input_image_mask: ImageGenerationInputImageMask """Optional mask for inpainting. @@ -176,7 +187,8 @@ class LocalShell(TypedDict, total=False): CodeInterpreter, ImageGeneration, LocalShell, + CustomToolParam, ] -ParseableToolParam: TypeAlias = Union[ToolParam, ChatCompletionToolParam] +ParseableToolParam: TypeAlias = Union[ToolParam, ChatCompletionFunctionToolParam] diff --git a/portkey_ai/_vendor/openai/types/shared/__init__.py b/portkey_ai/_vendor/openai/types/shared/__init__.py index 6ad0ed5e..2930b9ae 100644 --- a/portkey_ai/_vendor/openai/types/shared/__init__.py +++ b/portkey_ai/_vendor/openai/types/shared/__init__.py @@ -12,5 +12,8 @@ from .function_definition import FunctionDefinition as FunctionDefinition from .function_parameters import FunctionParameters as FunctionParameters from .response_format_text import ResponseFormatText as ResponseFormatText +from .custom_tool_input_format import CustomToolInputFormat as CustomToolInputFormat from .response_format_json_object import ResponseFormatJSONObject as ResponseFormatJSONObject from .response_format_json_schema import ResponseFormatJSONSchema as ResponseFormatJSONSchema +from .response_format_text_python import ResponseFormatTextPython as ResponseFormatTextPython +from .response_format_text_grammar import ResponseFormatTextGrammar as ResponseFormatTextGrammar diff --git a/portkey_ai/_vendor/openai/types/shared/all_models.py b/portkey_ai/_vendor/openai/types/shared/all_models.py index fae8c4c8..828f3b56 100644 --- a/portkey_ai/_vendor/openai/types/shared/all_models.py +++ b/portkey_ai/_vendor/openai/types/shared/all_models.py @@ -15,6 +15,10 @@ "o1-pro-2025-03-19", "o3-pro", "o3-pro-2025-06-10", + "o3-deep-research", + "o3-deep-research-2025-06-26", + "o4-mini-deep-research", + "o4-mini-deep-research-2025-06-26", "computer-use-preview", "computer-use-preview-2025-03-11", ], diff --git a/portkey_ai/_vendor/openai/types/shared/chat_model.py b/portkey_ai/_vendor/openai/types/shared/chat_model.py index 309368a3..727c60c1 100644 --- a/portkey_ai/_vendor/openai/types/shared/chat_model.py +++ b/portkey_ai/_vendor/openai/types/shared/chat_model.py @@ -5,6 +5,13 @@ __all__ = ["ChatModel"] ChatModel: TypeAlias = Literal[ + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5-2025-08-07", + "gpt-5-mini-2025-08-07", + "gpt-5-nano-2025-08-07", + "gpt-5-chat-latest", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", diff --git a/portkey_ai/_vendor/openai/types/shared/custom_tool_input_format.py b/portkey_ai/_vendor/openai/types/shared/custom_tool_input_format.py new file mode 100644 index 00000000..53c8323e --- /dev/null +++ b/portkey_ai/_vendor/openai/types/shared/custom_tool_input_format.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Union +from typing_extensions import Literal, Annotated, TypeAlias + +from ..._utils import PropertyInfo +from ..._models import BaseModel + +__all__ = ["CustomToolInputFormat", "Text", "Grammar"] + + +class Text(BaseModel): + type: Literal["text"] + """Unconstrained text format. Always `text`.""" + + +class Grammar(BaseModel): + definition: str + """The grammar definition.""" + + syntax: Literal["lark", "regex"] + """The syntax of the grammar definition. One of `lark` or `regex`.""" + + type: Literal["grammar"] + """Grammar format. Always `grammar`.""" + + +CustomToolInputFormat: TypeAlias = Annotated[Union[Text, Grammar], PropertyInfo(discriminator="type")] diff --git a/portkey_ai/_vendor/openai/types/shared/function_definition.py b/portkey_ai/_vendor/openai/types/shared/function_definition.py index 06baa231..33ebb9ad 100644 --- a/portkey_ai/_vendor/openai/types/shared/function_definition.py +++ b/portkey_ai/_vendor/openai/types/shared/function_definition.py @@ -39,5 +39,5 @@ class FunctionDefinition(BaseModel): If set to true, the model will follow the exact schema defined in the `parameters` field. Only a subset of JSON Schema is supported when `strict` is `true`. Learn more about Structured Outputs in the - [function calling guide](docs/guides/function-calling). + [function calling guide](https://platform.openai.com/docs/guides/function-calling). """ diff --git a/portkey_ai/_vendor/openai/types/shared/reasoning.py b/portkey_ai/_vendor/openai/types/shared/reasoning.py index 107aab2e..24ce3015 100644 --- a/portkey_ai/_vendor/openai/types/shared/reasoning.py +++ b/portkey_ai/_vendor/openai/types/shared/reasoning.py @@ -11,12 +11,12 @@ class Reasoning(BaseModel): effort: Optional[ReasoningEffort] = None - """**o-series models only** - + """ Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. """ generate_summary: Optional[Literal["auto", "concise", "detailed"]] = None diff --git a/portkey_ai/_vendor/openai/types/shared/reasoning_effort.py b/portkey_ai/_vendor/openai/types/shared/reasoning_effort.py index ace21b67..4b960cd7 100644 --- a/portkey_ai/_vendor/openai/types/shared/reasoning_effort.py +++ b/portkey_ai/_vendor/openai/types/shared/reasoning_effort.py @@ -5,4 +5,4 @@ __all__ = ["ReasoningEffort"] -ReasoningEffort: TypeAlias = Optional[Literal["low", "medium", "high"]] +ReasoningEffort: TypeAlias = Optional[Literal["minimal", "low", "medium", "high"]] diff --git a/portkey_ai/_vendor/openai/types/shared/response_format_text_grammar.py b/portkey_ai/_vendor/openai/types/shared/response_format_text_grammar.py new file mode 100644 index 00000000..b02f99c1 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/shared/response_format_text_grammar.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseFormatTextGrammar"] + + +class ResponseFormatTextGrammar(BaseModel): + grammar: str + """The custom grammar for the model to follow.""" + + type: Literal["grammar"] + """The type of response format being defined. Always `grammar`.""" diff --git a/portkey_ai/_vendor/openai/types/shared/response_format_text_python.py b/portkey_ai/_vendor/openai/types/shared/response_format_text_python.py new file mode 100644 index 00000000..4cd18d46 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/shared/response_format_text_python.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseFormatTextPython"] + + +class ResponseFormatTextPython(BaseModel): + type: Literal["python"] + """The type of response format being defined. Always `python`.""" diff --git a/portkey_ai/_vendor/openai/types/shared/responses_model.py b/portkey_ai/_vendor/openai/types/shared/responses_model.py index 790c1212..4d353568 100644 --- a/portkey_ai/_vendor/openai/types/shared/responses_model.py +++ b/portkey_ai/_vendor/openai/types/shared/responses_model.py @@ -15,6 +15,10 @@ "o1-pro-2025-03-19", "o3-pro", "o3-pro-2025-06-10", + "o3-deep-research", + "o3-deep-research-2025-06-26", + "o4-mini-deep-research", + "o4-mini-deep-research-2025-06-26", "computer-use-preview", "computer-use-preview-2025-03-11", ], diff --git a/portkey_ai/_vendor/openai/types/shared_params/__init__.py b/portkey_ai/_vendor/openai/types/shared_params/__init__.py index 88947108..b6c0912b 100644 --- a/portkey_ai/_vendor/openai/types/shared_params/__init__.py +++ b/portkey_ai/_vendor/openai/types/shared_params/__init__.py @@ -10,5 +10,6 @@ from .function_definition import FunctionDefinition as FunctionDefinition from .function_parameters import FunctionParameters as FunctionParameters from .response_format_text import ResponseFormatText as ResponseFormatText +from .custom_tool_input_format import CustomToolInputFormat as CustomToolInputFormat from .response_format_json_object import ResponseFormatJSONObject as ResponseFormatJSONObject from .response_format_json_schema import ResponseFormatJSONSchema as ResponseFormatJSONSchema diff --git a/portkey_ai/_vendor/openai/types/shared_params/chat_model.py b/portkey_ai/_vendor/openai/types/shared_params/chat_model.py index 6cd8e7f9..a1e5ab9f 100644 --- a/portkey_ai/_vendor/openai/types/shared_params/chat_model.py +++ b/portkey_ai/_vendor/openai/types/shared_params/chat_model.py @@ -7,6 +7,13 @@ __all__ = ["ChatModel"] ChatModel: TypeAlias = Literal[ + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5-2025-08-07", + "gpt-5-mini-2025-08-07", + "gpt-5-nano-2025-08-07", + "gpt-5-chat-latest", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", diff --git a/portkey_ai/_vendor/openai/types/shared_params/custom_tool_input_format.py b/portkey_ai/_vendor/openai/types/shared_params/custom_tool_input_format.py new file mode 100644 index 00000000..37df393e --- /dev/null +++ b/portkey_ai/_vendor/openai/types/shared_params/custom_tool_input_format.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import Literal, Required, TypeAlias, TypedDict + +__all__ = ["CustomToolInputFormat", "Text", "Grammar"] + + +class Text(TypedDict, total=False): + type: Required[Literal["text"]] + """Unconstrained text format. Always `text`.""" + + +class Grammar(TypedDict, total=False): + definition: Required[str] + """The grammar definition.""" + + syntax: Required[Literal["lark", "regex"]] + """The syntax of the grammar definition. One of `lark` or `regex`.""" + + type: Required[Literal["grammar"]] + """Grammar format. Always `grammar`.""" + + +CustomToolInputFormat: TypeAlias = Union[Text, Grammar] diff --git a/portkey_ai/_vendor/openai/types/shared_params/function_definition.py b/portkey_ai/_vendor/openai/types/shared_params/function_definition.py index d45ec13f..b3fdaf86 100644 --- a/portkey_ai/_vendor/openai/types/shared_params/function_definition.py +++ b/portkey_ai/_vendor/openai/types/shared_params/function_definition.py @@ -41,5 +41,5 @@ class FunctionDefinition(TypedDict, total=False): If set to true, the model will follow the exact schema defined in the `parameters` field. Only a subset of JSON Schema is supported when `strict` is `true`. Learn more about Structured Outputs in the - [function calling guide](docs/guides/function-calling). + [function calling guide](https://platform.openai.com/docs/guides/function-calling). """ diff --git a/portkey_ai/_vendor/openai/types/shared_params/reasoning.py b/portkey_ai/_vendor/openai/types/shared_params/reasoning.py index 73e1a008..7eab2c76 100644 --- a/portkey_ai/_vendor/openai/types/shared_params/reasoning.py +++ b/portkey_ai/_vendor/openai/types/shared_params/reasoning.py @@ -12,12 +12,12 @@ class Reasoning(TypedDict, total=False): effort: Optional[ReasoningEffort] - """**o-series models only** - + """ Constrains effort on reasoning for [reasoning models](https://platform.openai.com/docs/guides/reasoning). Currently - supported values are `low`, `medium`, and `high`. Reducing reasoning effort can - result in faster responses and fewer tokens used on reasoning in a response. + supported values are `minimal`, `low`, `medium`, and `high`. Reducing reasoning + effort can result in faster responses and fewer tokens used on reasoning in a + response. """ generate_summary: Optional[Literal["auto", "concise", "detailed"]] diff --git a/portkey_ai/_vendor/openai/types/shared_params/reasoning_effort.py b/portkey_ai/_vendor/openai/types/shared_params/reasoning_effort.py index 6052c5ae..4c095a28 100644 --- a/portkey_ai/_vendor/openai/types/shared_params/reasoning_effort.py +++ b/portkey_ai/_vendor/openai/types/shared_params/reasoning_effort.py @@ -7,4 +7,4 @@ __all__ = ["ReasoningEffort"] -ReasoningEffort: TypeAlias = Optional[Literal["low", "medium", "high"]] +ReasoningEffort: TypeAlias = Optional[Literal["minimal", "low", "medium", "high"]] diff --git a/portkey_ai/_vendor/openai/types/shared_params/responses_model.py b/portkey_ai/_vendor/openai/types/shared_params/responses_model.py index ca526b8f..adfcecf1 100644 --- a/portkey_ai/_vendor/openai/types/shared_params/responses_model.py +++ b/portkey_ai/_vendor/openai/types/shared_params/responses_model.py @@ -17,6 +17,10 @@ "o1-pro-2025-03-19", "o3-pro", "o3-pro-2025-06-10", + "o3-deep-research", + "o3-deep-research-2025-06-26", + "o4-mini-deep-research", + "o4-mini-deep-research-2025-06-26", "computer-use-preview", "computer-use-preview-2025-03-11", ], diff --git a/portkey_ai/_vendor/openai/types/vector_store_search_params.py b/portkey_ai/_vendor/openai/types/vector_store_search_params.py index 17573d0f..973c49ff 100644 --- a/portkey_ai/_vendor/openai/types/vector_store_search_params.py +++ b/portkey_ai/_vendor/openai/types/vector_store_search_params.py @@ -35,6 +35,7 @@ class VectorStoreSearchParams(TypedDict, total=False): class RankingOptions(TypedDict, total=False): - ranker: Literal["auto", "default-2024-11-15"] + ranker: Literal["none", "auto", "default-2024-11-15"] + """Enable re-ranking; set to `none` to disable, which can help reduce latency.""" score_threshold: float diff --git a/portkey_ai/_vendor/openai/types/webhooks/__init__.py b/portkey_ai/_vendor/openai/types/webhooks/__init__.py new file mode 100644 index 00000000..9caad38c --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/__init__.py @@ -0,0 +1,23 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from .unwrap_webhook_event import UnwrapWebhookEvent as UnwrapWebhookEvent +from .batch_failed_webhook_event import BatchFailedWebhookEvent as BatchFailedWebhookEvent +from .batch_expired_webhook_event import BatchExpiredWebhookEvent as BatchExpiredWebhookEvent +from .batch_cancelled_webhook_event import BatchCancelledWebhookEvent as BatchCancelledWebhookEvent +from .batch_completed_webhook_event import BatchCompletedWebhookEvent as BatchCompletedWebhookEvent +from .eval_run_failed_webhook_event import EvalRunFailedWebhookEvent as EvalRunFailedWebhookEvent +from .response_failed_webhook_event import ResponseFailedWebhookEvent as ResponseFailedWebhookEvent +from .eval_run_canceled_webhook_event import EvalRunCanceledWebhookEvent as EvalRunCanceledWebhookEvent +from .eval_run_succeeded_webhook_event import EvalRunSucceededWebhookEvent as EvalRunSucceededWebhookEvent +from .response_cancelled_webhook_event import ResponseCancelledWebhookEvent as ResponseCancelledWebhookEvent +from .response_completed_webhook_event import ResponseCompletedWebhookEvent as ResponseCompletedWebhookEvent +from .response_incomplete_webhook_event import ResponseIncompleteWebhookEvent as ResponseIncompleteWebhookEvent +from .fine_tuning_job_failed_webhook_event import FineTuningJobFailedWebhookEvent as FineTuningJobFailedWebhookEvent +from .fine_tuning_job_cancelled_webhook_event import ( + FineTuningJobCancelledWebhookEvent as FineTuningJobCancelledWebhookEvent, +) +from .fine_tuning_job_succeeded_webhook_event import ( + FineTuningJobSucceededWebhookEvent as FineTuningJobSucceededWebhookEvent, +) diff --git a/portkey_ai/_vendor/openai/types/webhooks/batch_cancelled_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/batch_cancelled_webhook_event.py new file mode 100644 index 00000000..4bbd7307 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/batch_cancelled_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["BatchCancelledWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the batch API request.""" + + +class BatchCancelledWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the batch API request was cancelled.""" + + data: Data + """Event data payload.""" + + type: Literal["batch.cancelled"] + """The type of the event. Always `batch.cancelled`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/batch_completed_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/batch_completed_webhook_event.py new file mode 100644 index 00000000..a47ca156 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/batch_completed_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["BatchCompletedWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the batch API request.""" + + +class BatchCompletedWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the batch API request was completed.""" + + data: Data + """Event data payload.""" + + type: Literal["batch.completed"] + """The type of the event. Always `batch.completed`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/batch_expired_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/batch_expired_webhook_event.py new file mode 100644 index 00000000..e91001e8 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/batch_expired_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["BatchExpiredWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the batch API request.""" + + +class BatchExpiredWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the batch API request expired.""" + + data: Data + """Event data payload.""" + + type: Literal["batch.expired"] + """The type of the event. Always `batch.expired`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/batch_failed_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/batch_failed_webhook_event.py new file mode 100644 index 00000000..ef80863e --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/batch_failed_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["BatchFailedWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the batch API request.""" + + +class BatchFailedWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the batch API request failed.""" + + data: Data + """Event data payload.""" + + type: Literal["batch.failed"] + """The type of the event. Always `batch.failed`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/eval_run_canceled_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/eval_run_canceled_webhook_event.py new file mode 100644 index 00000000..855359f7 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/eval_run_canceled_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["EvalRunCanceledWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the eval run.""" + + +class EvalRunCanceledWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the eval run was canceled.""" + + data: Data + """Event data payload.""" + + type: Literal["eval.run.canceled"] + """The type of the event. Always `eval.run.canceled`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/eval_run_failed_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/eval_run_failed_webhook_event.py new file mode 100644 index 00000000..76716807 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/eval_run_failed_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["EvalRunFailedWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the eval run.""" + + +class EvalRunFailedWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the eval run failed.""" + + data: Data + """Event data payload.""" + + type: Literal["eval.run.failed"] + """The type of the event. Always `eval.run.failed`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/eval_run_succeeded_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/eval_run_succeeded_webhook_event.py new file mode 100644 index 00000000..d0d1fc2b --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/eval_run_succeeded_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["EvalRunSucceededWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the eval run.""" + + +class EvalRunSucceededWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the eval run succeeded.""" + + data: Data + """Event data payload.""" + + type: Literal["eval.run.succeeded"] + """The type of the event. Always `eval.run.succeeded`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_cancelled_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_cancelled_webhook_event.py new file mode 100644 index 00000000..1fe3c060 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_cancelled_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["FineTuningJobCancelledWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the fine-tuning job.""" + + +class FineTuningJobCancelledWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the fine-tuning job was cancelled.""" + + data: Data + """Event data payload.""" + + type: Literal["fine_tuning.job.cancelled"] + """The type of the event. Always `fine_tuning.job.cancelled`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_failed_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_failed_webhook_event.py new file mode 100644 index 00000000..71d899c8 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_failed_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["FineTuningJobFailedWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the fine-tuning job.""" + + +class FineTuningJobFailedWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the fine-tuning job failed.""" + + data: Data + """Event data payload.""" + + type: Literal["fine_tuning.job.failed"] + """The type of the event. Always `fine_tuning.job.failed`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_succeeded_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_succeeded_webhook_event.py new file mode 100644 index 00000000..470f1fcf --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/fine_tuning_job_succeeded_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["FineTuningJobSucceededWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the fine-tuning job.""" + + +class FineTuningJobSucceededWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the fine-tuning job succeeded.""" + + data: Data + """Event data payload.""" + + type: Literal["fine_tuning.job.succeeded"] + """The type of the event. Always `fine_tuning.job.succeeded`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/response_cancelled_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/response_cancelled_webhook_event.py new file mode 100644 index 00000000..443e360e --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/response_cancelled_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseCancelledWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the model response.""" + + +class ResponseCancelledWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the model response was cancelled.""" + + data: Data + """Event data payload.""" + + type: Literal["response.cancelled"] + """The type of the event. Always `response.cancelled`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/response_completed_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/response_completed_webhook_event.py new file mode 100644 index 00000000..ac1feff3 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/response_completed_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseCompletedWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the model response.""" + + +class ResponseCompletedWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the model response was completed.""" + + data: Data + """Event data payload.""" + + type: Literal["response.completed"] + """The type of the event. Always `response.completed`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/response_failed_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/response_failed_webhook_event.py new file mode 100644 index 00000000..5b4ba65e --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/response_failed_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseFailedWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the model response.""" + + +class ResponseFailedWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the model response failed.""" + + data: Data + """Event data payload.""" + + type: Literal["response.failed"] + """The type of the event. Always `response.failed`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/response_incomplete_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/response_incomplete_webhook_event.py new file mode 100644 index 00000000..01609314 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/response_incomplete_webhook_event.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from ..._models import BaseModel + +__all__ = ["ResponseIncompleteWebhookEvent", "Data"] + + +class Data(BaseModel): + id: str + """The unique ID of the model response.""" + + +class ResponseIncompleteWebhookEvent(BaseModel): + id: str + """The unique ID of the event.""" + + created_at: int + """The Unix timestamp (in seconds) of when the model response was interrupted.""" + + data: Data + """Event data payload.""" + + type: Literal["response.incomplete"] + """The type of the event. Always `response.incomplete`.""" + + object: Optional[Literal["event"]] = None + """The object of the event. Always `event`.""" diff --git a/portkey_ai/_vendor/openai/types/webhooks/unwrap_webhook_event.py b/portkey_ai/_vendor/openai/types/webhooks/unwrap_webhook_event.py new file mode 100644 index 00000000..91091af3 --- /dev/null +++ b/portkey_ai/_vendor/openai/types/webhooks/unwrap_webhook_event.py @@ -0,0 +1,42 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Union +from typing_extensions import Annotated, TypeAlias + +from ..._utils import PropertyInfo +from .batch_failed_webhook_event import BatchFailedWebhookEvent +from .batch_expired_webhook_event import BatchExpiredWebhookEvent +from .batch_cancelled_webhook_event import BatchCancelledWebhookEvent +from .batch_completed_webhook_event import BatchCompletedWebhookEvent +from .eval_run_failed_webhook_event import EvalRunFailedWebhookEvent +from .response_failed_webhook_event import ResponseFailedWebhookEvent +from .eval_run_canceled_webhook_event import EvalRunCanceledWebhookEvent +from .eval_run_succeeded_webhook_event import EvalRunSucceededWebhookEvent +from .response_cancelled_webhook_event import ResponseCancelledWebhookEvent +from .response_completed_webhook_event import ResponseCompletedWebhookEvent +from .response_incomplete_webhook_event import ResponseIncompleteWebhookEvent +from .fine_tuning_job_failed_webhook_event import FineTuningJobFailedWebhookEvent +from .fine_tuning_job_cancelled_webhook_event import FineTuningJobCancelledWebhookEvent +from .fine_tuning_job_succeeded_webhook_event import FineTuningJobSucceededWebhookEvent + +__all__ = ["UnwrapWebhookEvent"] + +UnwrapWebhookEvent: TypeAlias = Annotated[ + Union[ + BatchCancelledWebhookEvent, + BatchCompletedWebhookEvent, + BatchExpiredWebhookEvent, + BatchFailedWebhookEvent, + EvalRunCanceledWebhookEvent, + EvalRunFailedWebhookEvent, + EvalRunSucceededWebhookEvent, + FineTuningJobCancelledWebhookEvent, + FineTuningJobFailedWebhookEvent, + FineTuningJobSucceededWebhookEvent, + ResponseCancelledWebhookEvent, + ResponseCompletedWebhookEvent, + ResponseFailedWebhookEvent, + ResponseIncompleteWebhookEvent, + ], + PropertyInfo(discriminator="type"), +] From da4c09e9613c169868f2104684d7cb001c5ad7a2 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Wed, 20 Aug 2025 19:29:42 +0530 Subject: [PATCH 11/14] feat: handle extra_body --- portkey_ai/api_resources/apis/responses.py | 68 +++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/portkey_ai/api_resources/apis/responses.py b/portkey_ai/api_resources/apis/responses.py index aa02eb1f..d037e31b 100644 --- a/portkey_ai/api_resources/apis/responses.py +++ b/portkey_ai/api_resources/apis/responses.py @@ -47,8 +47,8 @@ def __init__(self, client: Portkey) -> None: def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, max_output_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, @@ -73,8 +73,8 @@ def create( def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, stream: Literal[True], include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, @@ -99,8 +99,8 @@ def create( def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, stream: bool, include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, @@ -124,8 +124,8 @@ def create( def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, max_output_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, @@ -170,7 +170,7 @@ def create( user=user, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -191,7 +191,7 @@ def retrieve( include=include, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -210,7 +210,7 @@ def delete(self, response_id: str, **kwargs) -> None: response_id=response_id, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -262,15 +262,15 @@ def stream( user=user, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) def parse( self, *, - input: Union[str, ResponseInputParam], - model: Union[str, ChatModel], + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[str, ChatModel, NotGiven] = NOT_GIVEN, text_format: Union[type[TextFormatT], NotGiven] = NOT_GIVEN, # type: ignore[type-arg] tools: Union[Iterable[ParseableToolParam], NotGiven] = NOT_GIVEN, include: Union[List[ResponseIncludable], NotGiven] = NOT_GIVEN, @@ -317,7 +317,7 @@ def parse( user=user, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -334,7 +334,7 @@ def cancel( response_id=response_id, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -368,7 +368,7 @@ def list( order=order, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -385,8 +385,8 @@ def __init__(self, client: AsyncPortkey) -> None: async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, max_output_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, @@ -411,8 +411,8 @@ async def create( async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, stream: Literal[True], include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, @@ -437,8 +437,8 @@ async def create( async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, stream: bool, include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, @@ -462,8 +462,8 @@ async def create( async def create( self, *, - input: Union[str, ResponseInputParam], - model: ResponsesModel, + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[ResponsesModel, NotGiven] = NOT_GIVEN, include: Union[Optional[List[ResponseIncludable]], NotGiven] = NOT_GIVEN, instructions: Union[Optional[str], NotGiven] = NOT_GIVEN, max_output_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, @@ -508,7 +508,7 @@ async def create( user=user, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -529,7 +529,7 @@ async def retrieve( include=include, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -548,7 +548,7 @@ async def delete(self, response_id: str, **kwargs) -> None: response_id=response_id, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -600,15 +600,15 @@ def stream( user=user, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) async def parse( self, *, - input: Union[str, ResponseInputParam], - model: Union[str, ChatModel], + input: Union[str, ResponseInputParam, NotGiven] = NOT_GIVEN, + model: Union[str, ChatModel, NotGiven] = NOT_GIVEN, text_format: Union[type[TextFormatT], NotGiven] = NOT_GIVEN, # type: ignore[type-arg] tools: Union[Iterable[ParseableToolParam], NotGiven] = NOT_GIVEN, include: Union[List[ResponseIncludable], NotGiven] = NOT_GIVEN, @@ -655,7 +655,7 @@ async def parse( user=user, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -672,7 +672,7 @@ async def cancel( response_id=response_id, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) @@ -706,7 +706,7 @@ async def list( order=order, extra_headers=extra_headers, extra_query=extra_query, - extra_body=extra_body, + extra_body={**(extra_body or {}), **kwargs}, timeout=timeout, ) From fe0e47b0a5d60a42e2ca4f55ff7355d098c2dae5 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Wed, 20 Aug 2025 19:35:26 +0530 Subject: [PATCH 12/14] feat: stream and retrieve parameters --- portkey_ai/api_resources/apis/responses.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/portkey_ai/api_resources/apis/responses.py b/portkey_ai/api_resources/apis/responses.py index d037e31b..871eb31d 100644 --- a/portkey_ai/api_resources/apis/responses.py +++ b/portkey_ai/api_resources/apis/responses.py @@ -179,6 +179,8 @@ def retrieve( response_id: str, *, include: Union[List[ResponseIncludable], NotGiven] = NOT_GIVEN, + include_obfuscation: Union[bool, NotGiven] = NOT_GIVEN, + starting_after: Union[int, NotGiven] = NOT_GIVEN, **kwargs, ) -> ResponseType: extra_headers = kwargs.pop("extra_headers", None) @@ -189,6 +191,8 @@ def retrieve( response = self.openai_client.with_raw_response.responses.retrieve( response_id=response_id, include=include, + include_obfuscation=include_obfuscation, + starting_after=starting_after, extra_headers=extra_headers, extra_query=extra_query, extra_body={**(extra_body or {}), **kwargs}, @@ -229,6 +233,9 @@ def stream( previous_response_id: Union[str, NotGiven] = NOT_GIVEN, reasoning: Union[Reasoning, NotGiven] = NOT_GIVEN, store: Union[bool, NotGiven] = NOT_GIVEN, + stream_options: Union[ + response_create_params.StreamOptions, NotGiven + ] = NOT_GIVEN, temperature: Union[float, NotGiven] = NOT_GIVEN, text: Union[ResponseTextConfigParam, NotGiven] = NOT_GIVEN, tool_choice: Union[response_create_params.ToolChoice, NotGiven] = NOT_GIVEN, @@ -254,6 +261,7 @@ def stream( previous_response_id=previous_response_id, reasoning=reasoning, store=store, + stream_options=stream_options, temperature=temperature, text=text, tool_choice=tool_choice, @@ -517,6 +525,8 @@ async def retrieve( response_id: str, *, include: Union[List[ResponseIncludable], NotGiven] = NOT_GIVEN, + include_obfuscation: Union[bool, NotGiven] = NOT_GIVEN, + starting_after: Union[int, NotGiven] = NOT_GIVEN, **kwargs, ) -> ResponseType: extra_headers = kwargs.pop("extra_headers", None) @@ -527,6 +537,8 @@ async def retrieve( response = await self.openai_client.with_raw_response.responses.retrieve( response_id=response_id, include=include, + include_obfuscation=include_obfuscation, + starting_after=starting_after, extra_headers=extra_headers, extra_query=extra_query, extra_body={**(extra_body or {}), **kwargs}, @@ -567,6 +579,9 @@ def stream( previous_response_id: Union[str, NotGiven] = NOT_GIVEN, reasoning: Union[Reasoning, NotGiven] = NOT_GIVEN, store: Union[bool, NotGiven] = NOT_GIVEN, + stream_options: Union[ + response_create_params.StreamOptions, NotGiven + ] = NOT_GIVEN, temperature: Union[float, NotGiven] = NOT_GIVEN, text: Union[ResponseTextConfigParam, NotGiven] = NOT_GIVEN, tool_choice: Union[response_create_params.ToolChoice, NotGiven] = NOT_GIVEN, @@ -592,6 +607,7 @@ def stream( previous_response_id=previous_response_id, reasoning=reasoning, store=store, + stream_options=stream_options, temperature=temperature, text=text, tool_choice=tool_choice, From c4e7070ef021470e90e8e843f5f075d7c094a395 Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Fri, 22 Aug 2025 14:46:54 +0530 Subject: [PATCH 13/14] feat: parse in chat completion --- .../api_resources/apis/chat_complete.py | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) diff --git a/portkey_ai/api_resources/apis/chat_complete.py b/portkey_ai/api_resources/apis/chat_complete.py index 5a5a6c5f..32aa3136 100644 --- a/portkey_ai/api_resources/apis/chat_complete.py +++ b/portkey_ai/api_resources/apis/chat_complete.py @@ -15,6 +15,9 @@ ) import httpx +from portkey_ai._vendor.openai.types.chat.parsed_chat_completion import ( + ParsedChatCompletion, +) from portkey_ai.api_resources.client import AsyncPortkey, Portkey from portkey_ai.api_resources.types.chat_complete_type import ( ChatCompletionChunk, @@ -297,6 +300,88 @@ def delete( return data + def parse( + self, + *, + messages: Iterable[Any], + model: Optional[str] = "portkey-default", + audio: Union[Optional[Any], NotGiven] = NOT_GIVEN, + response_format: Union[Any, NotGiven] = NOT_GIVEN, + frequency_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + function_call: Union[Any, NotGiven] = NOT_GIVEN, + functions: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + logit_bias: Union[Optional[Dict[str, int]], NotGiven] = NOT_GIVEN, + logprobs: Union[Optional[bool], NotGiven] = NOT_GIVEN, + max_completion_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + max_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + metadata: Union[Optional[Metadata], NotGiven] = NOT_GIVEN, + modalities: Union[Optional[List[Any]], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + parallel_tool_calls: Union[bool, NotGiven] = NOT_GIVEN, + prediction: Union[Any, NotGiven] = NOT_GIVEN, + presence_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + prompt_cache_key: Union[str, NotGiven] = NOT_GIVEN, + reasoning_effort: Union[Any, NotGiven] = NOT_GIVEN, + safety_identifier: Union[str, NotGiven] = NOT_GIVEN, + seed: Union[Optional[int], NotGiven] = NOT_GIVEN, + service_tier: Union[ + Literal["auto", "default", "flex", "scale", "priority"], NotGiven + ] = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Union[Optional[bool], NotGiven] = NOT_GIVEN, + stream_options: Union[Any, NotGiven] = NOT_GIVEN, + temperature: Union[Optional[float], NotGiven] = NOT_GIVEN, + tool_choice: Union[Any, NotGiven] = NOT_GIVEN, + tools: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + top_logprobs: Union[Optional[int], NotGiven] = NOT_GIVEN, + top_p: Union[Optional[float], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + verbosity: Union[Literal["low", "medium", "high"], NotGiven] = NOT_GIVEN, + web_search_options: Union[Any, NotGiven] = NOT_GIVEN, + extra_headers: Optional[Headers] = None, + extra_query: Optional[Query] = None, + extra_body: Optional[Body] = None, + ) -> ParsedChatCompletion: + response = self.openai_client.chat.completions.parse( + messages=messages, + model=model, # type: ignore[arg-type] + audio=audio, + response_format=response_format, + frequency_penalty=frequency_penalty, + function_call=function_call, + functions=functions, + logit_bias=logit_bias, + logprobs=logprobs, + max_completion_tokens=max_completion_tokens, + max_tokens=max_tokens, + metadata=metadata, + modalities=modalities, + n=n, + parallel_tool_calls=parallel_tool_calls, + prediction=prediction, + presence_penalty=presence_penalty, + prompt_cache_key=prompt_cache_key, + reasoning_effort=reasoning_effort, + safety_identifier=safety_identifier, + seed=seed, + service_tier=service_tier, + stop=stop, + store=store, + stream_options=stream_options, + temperature=temperature, + tool_choice=tool_choice, + tools=tools, + top_logprobs=top_logprobs, + top_p=top_p, + user=user, + verbosity=verbosity, + web_search_options=web_search_options, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + ) + return response + class AsyncCompletions(AsyncAPIResource): def __init__(self, client: AsyncPortkey) -> None: @@ -542,6 +627,88 @@ async def delete( return data + async def parse( + self, + *, + messages: Iterable[Any], + model: Optional[str] = "portkey-default", + audio: Union[Optional[Any], NotGiven] = NOT_GIVEN, + response_format: Union[Any, NotGiven] = NOT_GIVEN, + frequency_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + function_call: Union[Any, NotGiven] = NOT_GIVEN, + functions: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + logit_bias: Union[Optional[Dict[str, int]], NotGiven] = NOT_GIVEN, + logprobs: Union[Optional[bool], NotGiven] = NOT_GIVEN, + max_completion_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + max_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + metadata: Union[Optional[Metadata], NotGiven] = NOT_GIVEN, + modalities: Union[Optional[List[Any]], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + parallel_tool_calls: Union[bool, NotGiven] = NOT_GIVEN, + prediction: Union[Any, NotGiven] = NOT_GIVEN, + presence_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + prompt_cache_key: Union[str, NotGiven] = NOT_GIVEN, + reasoning_effort: Union[Any, NotGiven] = NOT_GIVEN, + safety_identifier: Union[str, NotGiven] = NOT_GIVEN, + seed: Union[Optional[int], NotGiven] = NOT_GIVEN, + service_tier: Union[ + Literal["auto", "default", "flex", "scale", "priority"], NotGiven + ] = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Union[Optional[bool], NotGiven] = NOT_GIVEN, + stream_options: Union[Any, NotGiven] = NOT_GIVEN, + temperature: Union[Optional[float], NotGiven] = NOT_GIVEN, + tool_choice: Union[Any, NotGiven] = NOT_GIVEN, + tools: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + top_logprobs: Union[Optional[int], NotGiven] = NOT_GIVEN, + top_p: Union[Optional[float], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + verbosity: Union[Literal["low", "medium", "high"], NotGiven] = NOT_GIVEN, + web_search_options: Union[Any, NotGiven] = NOT_GIVEN, + extra_headers: Optional[Headers] = None, + extra_query: Optional[Query] = None, + extra_body: Optional[Body] = None, + ) -> ParsedChatCompletion: + response = await self.openai_client.chat.completions.parse( + messages=messages, + model=model, # type: ignore[arg-type] + audio=audio, + response_format=response_format, + frequency_penalty=frequency_penalty, + function_call=function_call, + functions=functions, + logit_bias=logit_bias, + logprobs=logprobs, + max_completion_tokens=max_completion_tokens, + max_tokens=max_tokens, + metadata=metadata, + modalities=modalities, + n=n, + parallel_tool_calls=parallel_tool_calls, + prediction=prediction, + presence_penalty=presence_penalty, + prompt_cache_key=prompt_cache_key, + reasoning_effort=reasoning_effort, + safety_identifier=safety_identifier, + seed=seed, + service_tier=service_tier, + stop=stop, + store=store, + stream_options=stream_options, + temperature=temperature, + tool_choice=tool_choice, + tools=tools, + top_logprobs=top_logprobs, + top_p=top_p, + user=user, + verbosity=verbosity, + web_search_options=web_search_options, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + ) + return response + def _get_config_string(self, config: Union[Mapping, str]) -> str: return config if isinstance(config, str) else json.dumps(config) From 37440cebb2ea6563695ef3a087bab06c12522fca Mon Sep 17 00:00:00 2001 From: csgulati09 Date: Fri, 22 Aug 2025 17:35:31 +0530 Subject: [PATCH 14/14] feat: stream in chat completion --- .../api_resources/apis/chat_complete.py | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/portkey_ai/api_resources/apis/chat_complete.py b/portkey_ai/api_resources/apis/chat_complete.py index 32aa3136..ed8d3b36 100644 --- a/portkey_ai/api_resources/apis/chat_complete.py +++ b/portkey_ai/api_resources/apis/chat_complete.py @@ -382,6 +382,87 @@ def parse( ) return response + def stream( + self, + *, + messages: Iterable[Any], + model: Optional[str] = "portkey-default", + audio: Union[Optional[Any], NotGiven] = NOT_GIVEN, + response_format: Union[Any, NotGiven] = NOT_GIVEN, + frequency_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + function_call: Union[Any, NotGiven] = NOT_GIVEN, + functions: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + logit_bias: Union[Optional[Dict[str, int]], NotGiven] = NOT_GIVEN, + logprobs: Union[Optional[bool], NotGiven] = NOT_GIVEN, + max_completion_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + max_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + metadata: Union[Optional[Metadata], NotGiven] = NOT_GIVEN, + modalities: Union[Optional[List[Any]], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + parallel_tool_calls: Union[bool, NotGiven] = NOT_GIVEN, + prediction: Union[Any, NotGiven] = NOT_GIVEN, + presence_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + prompt_cache_key: Union[str, NotGiven] = NOT_GIVEN, + reasoning_effort: Union[Any, NotGiven] = NOT_GIVEN, + safety_identifier: Union[str, NotGiven] = NOT_GIVEN, + seed: Union[Optional[int], NotGiven] = NOT_GIVEN, + service_tier: Union[ + Literal["auto", "default", "flex", "scale", "priority"], NotGiven + ] = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Union[Optional[bool], NotGiven] = NOT_GIVEN, + stream_options: Union[Any, NotGiven] = NOT_GIVEN, + temperature: Union[Optional[float], NotGiven] = NOT_GIVEN, + tool_choice: Union[Any, NotGiven] = NOT_GIVEN, + tools: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + top_logprobs: Union[Optional[int], NotGiven] = NOT_GIVEN, + top_p: Union[Optional[float], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + verbosity: Union[Literal["low", "medium", "high"], NotGiven] = NOT_GIVEN, + web_search_options: Union[Any, NotGiven] = NOT_GIVEN, + extra_headers: Optional[Headers] = None, + extra_query: Optional[Query] = None, + extra_body: Optional[Body] = None, + ) -> Any: + return self.openai_client.chat.completions.stream( + messages=messages, + model=model, # type: ignore[arg-type] + audio=audio, + response_format=response_format, + frequency_penalty=frequency_penalty, + function_call=function_call, + functions=functions, + logit_bias=logit_bias, + logprobs=logprobs, + max_completion_tokens=max_completion_tokens, + max_tokens=max_tokens, + metadata=metadata, + modalities=modalities, + n=n, + parallel_tool_calls=parallel_tool_calls, + prediction=prediction, + presence_penalty=presence_penalty, + prompt_cache_key=prompt_cache_key, + reasoning_effort=reasoning_effort, + safety_identifier=safety_identifier, + seed=seed, + service_tier=service_tier, + stop=stop, + store=store, + stream_options=stream_options, + temperature=temperature, + tool_choice=tool_choice, + tools=tools, + top_logprobs=top_logprobs, + top_p=top_p, + user=user, + verbosity=verbosity, + web_search_options=web_search_options, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + ) + class AsyncCompletions(AsyncAPIResource): def __init__(self, client: AsyncPortkey) -> None: @@ -709,6 +790,87 @@ async def parse( ) return response + def stream( + self, + *, + messages: Iterable[Any], + model: Optional[str] = "portkey-default", + audio: Union[Optional[Any], NotGiven] = NOT_GIVEN, + response_format: Union[Any, NotGiven] = NOT_GIVEN, + frequency_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + function_call: Union[Any, NotGiven] = NOT_GIVEN, + functions: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + logit_bias: Union[Optional[Dict[str, int]], NotGiven] = NOT_GIVEN, + logprobs: Union[Optional[bool], NotGiven] = NOT_GIVEN, + max_completion_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + max_tokens: Union[Optional[int], NotGiven] = NOT_GIVEN, + metadata: Union[Optional[Metadata], NotGiven] = NOT_GIVEN, + modalities: Union[Optional[List[Any]], NotGiven] = NOT_GIVEN, + n: Union[Optional[int], NotGiven] = NOT_GIVEN, + parallel_tool_calls: Union[bool, NotGiven] = NOT_GIVEN, + prediction: Union[Any, NotGiven] = NOT_GIVEN, + presence_penalty: Union[Optional[float], NotGiven] = NOT_GIVEN, + prompt_cache_key: Union[str, NotGiven] = NOT_GIVEN, + reasoning_effort: Union[Any, NotGiven] = NOT_GIVEN, + safety_identifier: Union[str, NotGiven] = NOT_GIVEN, + seed: Union[Optional[int], NotGiven] = NOT_GIVEN, + service_tier: Union[ + Literal["auto", "default", "flex", "scale", "priority"], NotGiven + ] = NOT_GIVEN, + stop: Union[Optional[str], List[str], None] | NotGiven = NOT_GIVEN, + store: Union[Optional[bool], NotGiven] = NOT_GIVEN, + stream_options: Union[Any, NotGiven] = NOT_GIVEN, + temperature: Union[Optional[float], NotGiven] = NOT_GIVEN, + tool_choice: Union[Any, NotGiven] = NOT_GIVEN, + tools: Union[Iterable[Any], NotGiven] = NOT_GIVEN, + top_logprobs: Union[Optional[int], NotGiven] = NOT_GIVEN, + top_p: Union[Optional[float], NotGiven] = NOT_GIVEN, + user: Union[str, NotGiven] = NOT_GIVEN, + verbosity: Union[Literal["low", "medium", "high"], NotGiven] = NOT_GIVEN, + web_search_options: Union[Any, NotGiven] = NOT_GIVEN, + extra_headers: Optional[Headers] = None, + extra_query: Optional[Query] = None, + extra_body: Optional[Body] = None, + ) -> Any: + return self.openai_client.chat.completions.stream( + messages=messages, + model=model, # type: ignore[arg-type] + audio=audio, + response_format=response_format, + frequency_penalty=frequency_penalty, + function_call=function_call, + functions=functions, + logit_bias=logit_bias, + logprobs=logprobs, + max_completion_tokens=max_completion_tokens, + max_tokens=max_tokens, + metadata=metadata, + modalities=modalities, + n=n, + parallel_tool_calls=parallel_tool_calls, + prediction=prediction, + presence_penalty=presence_penalty, + prompt_cache_key=prompt_cache_key, + reasoning_effort=reasoning_effort, + safety_identifier=safety_identifier, + seed=seed, + service_tier=service_tier, + stop=stop, + store=store, + stream_options=stream_options, + temperature=temperature, + tool_choice=tool_choice, + tools=tools, + top_logprobs=top_logprobs, + top_p=top_p, + user=user, + verbosity=verbosity, + web_search_options=web_search_options, + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + ) + def _get_config_string(self, config: Union[Mapping, str]) -> str: return config if isinstance(config, str) else json.dumps(config)