Commit d0a20e9e

Stainless Bot <107565488+stainless-bot@users.noreply.github.com>
2024-01-06 07:07:54
chore(internal): loosen type var restrictions (#1049)
1 parent 4aa7cbe
src/openai/resources/audio/speech.py
@@ -7,13 +7,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ..._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ..._utils import maybe_transform
 from ..._compat import cached_property
 from ..._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/audio/transcriptions.py
@@ -7,14 +7,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ..._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-    FileTypes,
-)
+from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
 from ..._utils import extract_files, maybe_transform, deepcopy_minimal
 from ..._compat import cached_property
 from ..._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/audio/translations.py
@@ -7,14 +7,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ..._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-    FileTypes,
-)
+from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
 from ..._utils import extract_files, maybe_transform, deepcopy_minimal
 from ..._compat import cached_property
 from ..._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/beta/assistants/assistants.py
@@ -8,13 +8,7 @@ from typing_extensions import Literal
 import httpx
 
 from .files import Files, AsyncFiles, FilesWithRawResponse, AsyncFilesWithRawResponse
-from ...._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ...._utils import maybe_transform
 from ...._compat import cached_property
 from ...._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/beta/assistants/files.py
@@ -6,13 +6,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ...._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ...._utils import maybe_transform
 from ...._compat import cached_property
 from ...._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/beta/threads/messages/files.py
@@ -6,13 +6,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ....._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ....._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ....._utils import maybe_transform
 from ....._compat import cached_property
 from ....._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/beta/threads/messages/messages.py
@@ -8,13 +8,7 @@ from typing_extensions import Literal
 import httpx
 
 from .files import Files, AsyncFiles, FilesWithRawResponse, AsyncFilesWithRawResponse
-from ....._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ....._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ....._utils import maybe_transform
 from ....._compat import cached_property
 from ....._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/beta/threads/runs/runs.py
@@ -8,13 +8,7 @@ from typing_extensions import Literal
 import httpx
 
 from .steps import Steps, AsyncSteps, StepsWithRawResponse, AsyncStepsWithRawResponse
-from ....._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ....._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ....._utils import maybe_transform
 from ....._compat import cached_property
 from ....._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/beta/threads/runs/steps.py
@@ -6,13 +6,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ....._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ....._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ....._utils import maybe_transform
 from ....._compat import cached_property
 from ....._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/beta/threads/threads.py
@@ -8,13 +8,7 @@ import httpx
 
 from .runs import Runs, AsyncRuns, RunsWithRawResponse, AsyncRunsWithRawResponse
 from .messages import Messages, AsyncMessages, MessagesWithRawResponse, AsyncMessagesWithRawResponse
-from ...._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ...._utils import maybe_transform
 from .runs.runs import Runs, AsyncRuns
 from ...._compat import cached_property
src/openai/resources/chat/completions.py
@@ -7,13 +7,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ..._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ..._utils import required_args, maybe_transform
 from ..._compat import cached_property
 from ..._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/fine_tuning/jobs.py
@@ -7,13 +7,7 @@ from typing_extensions import Literal
 
 import httpx
 
-from ..._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from ..._utils import maybe_transform
 from ..._compat import cached_property
 from ..._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/completions.py
@@ -8,13 +8,7 @@ from typing_extensions import Literal
 import httpx
 
 from ..types import Completion, completion_create_params
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from .._utils import required_args, maybe_transform
 from .._compat import cached_property
 from .._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/edits.py
@@ -9,13 +9,7 @@ from typing_extensions import Literal
 import httpx
 
 from ..types import Edit, edit_create_params
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from .._utils import maybe_transform
 from .._compat import cached_property
 from .._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/embeddings.py
@@ -9,13 +9,7 @@ from typing_extensions import Literal
 import httpx
 
 from ..types import CreateEmbeddingResponse, embedding_create_params
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from .._utils import is_given, maybe_transform
 from .._compat import cached_property
 from .._extras import numpy as np, has_numpy
src/openai/resources/files.py
@@ -10,14 +10,7 @@ from typing_extensions import Literal
 import httpx
 
 from ..types import FileObject, FileDeleted, file_list_params, file_create_params
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-    FileTypes,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
 from .._utils import extract_files, maybe_transform, deepcopy_minimal
 from .._compat import cached_property
 from .._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/fine_tunes.py
@@ -14,13 +14,7 @@ from ..types import (
     fine_tune_create_params,
     fine_tune_list_events_params,
 )
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from .._utils import maybe_transform
 from .._compat import cached_property
 from .._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/images.py
@@ -13,14 +13,7 @@ from ..types import (
     image_generate_params,
     image_create_variation_params,
 )
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-    FileTypes,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
 from .._utils import extract_files, maybe_transform, deepcopy_minimal
 from .._compat import cached_property
 from .._resource import SyncAPIResource, AsyncAPIResource
src/openai/resources/models.py
@@ -5,13 +5,7 @@ from __future__ import annotations
 import httpx
 
 from ..types import Model, ModelDeleted
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from .._compat import cached_property
 from .._resource import SyncAPIResource, AsyncAPIResource
 from .._response import to_raw_response_wrapper, async_to_raw_response_wrapper
src/openai/resources/moderations.py
@@ -8,13 +8,7 @@ from typing_extensions import Literal
 import httpx
 
 from ..types import ModerationCreateResponse, moderation_create_params
-from .._types import (
-    NOT_GIVEN,
-    Body,
-    Query,
-    Headers,
-    NotGiven,
-)
+from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
 from .._utils import maybe_transform
 from .._compat import cached_property
 from .._resource import SyncAPIResource, AsyncAPIResource
src/openai/_base_client.py
@@ -48,7 +48,6 @@ from ._types import (
     Body,
     Omit,
     Query,
-    ModelT,
     Headers,
     Timeout,
     NotGiven,
@@ -61,7 +60,6 @@ from ._types import (
     HttpxSendArgs,
     AsyncTransport,
     RequestOptions,
-    UnknownResponse,
     ModelBuilderProtocol,
     BinaryResponseContent,
 )
@@ -142,7 +140,7 @@ class PageInfo:
         self.params = params
 
 
-class BasePage(GenericModel, Generic[ModelT]):
+class BasePage(GenericModel, Generic[_T]):
     """
     Defines the core interface for pagination.
 
@@ -155,7 +153,7 @@ class BasePage(GenericModel, Generic[ModelT]):
     """
 
     _options: FinalRequestOptions = PrivateAttr()
-    _model: Type[ModelT] = PrivateAttr()
+    _model: Type[_T] = PrivateAttr()
 
     def has_next_page(self) -> bool:
         items = self._get_page_items()
@@ -166,7 +164,7 @@ class BasePage(GenericModel, Generic[ModelT]):
     def next_page_info(self) -> Optional[PageInfo]:
         ...
 
-    def _get_page_items(self) -> Iterable[ModelT]:  # type: ignore[empty-body]
+    def _get_page_items(self) -> Iterable[_T]:  # type: ignore[empty-body]
         ...
 
     def _params_from_url(self, url: URL) -> httpx.QueryParams:
@@ -191,13 +189,13 @@ class BasePage(GenericModel, Generic[ModelT]):
         raise ValueError("Unexpected PageInfo state")
 
 
-class BaseSyncPage(BasePage[ModelT], Generic[ModelT]):
+class BaseSyncPage(BasePage[_T], Generic[_T]):
     _client: SyncAPIClient = pydantic.PrivateAttr()
 
     def _set_private_attributes(
         self,
         client: SyncAPIClient,
-        model: Type[ModelT],
+        model: Type[_T],
         options: FinalRequestOptions,
     ) -> None:
         self._model = model
@@ -212,7 +210,7 @@ class BaseSyncPage(BasePage[ModelT], Generic[ModelT]):
     # methods should continue to work as expected as there is an alternative method
     # to cast a model to a dictionary, model.dict(), which is used internally
     # by pydantic.
-    def __iter__(self) -> Iterator[ModelT]:  # type: ignore
+    def __iter__(self) -> Iterator[_T]:  # type: ignore
         for page in self.iter_pages():
             for item in page._get_page_items():
                 yield item
@@ -237,13 +235,13 @@ class BaseSyncPage(BasePage[ModelT], Generic[ModelT]):
         return self._client._request_api_list(self._model, page=self.__class__, options=options)
 
 
-class AsyncPaginator(Generic[ModelT, AsyncPageT]):
+class AsyncPaginator(Generic[_T, AsyncPageT]):
     def __init__(
         self,
         client: AsyncAPIClient,
         options: FinalRequestOptions,
         page_cls: Type[AsyncPageT],
-        model: Type[ModelT],
+        model: Type[_T],
     ) -> None:
         self._model = model
         self._client = client
@@ -266,7 +264,7 @@ class AsyncPaginator(Generic[ModelT, AsyncPageT]):
 
         return await self._client.request(self._page_cls, self._options)
 
-    async def __aiter__(self) -> AsyncIterator[ModelT]:
+    async def __aiter__(self) -> AsyncIterator[_T]:
         # https://github.com/microsoft/pyright/issues/3464
         page = cast(
             AsyncPageT,
@@ -276,12 +274,12 @@ class AsyncPaginator(Generic[ModelT, AsyncPageT]):
             yield item
 
 
-class BaseAsyncPage(BasePage[ModelT], Generic[ModelT]):
+class BaseAsyncPage(BasePage[_T], Generic[_T]):
     _client: AsyncAPIClient = pydantic.PrivateAttr()
 
     def _set_private_attributes(
         self,
-        model: Type[ModelT],
+        model: Type[_T],
         client: AsyncAPIClient,
         options: FinalRequestOptions,
     ) -> None:
@@ -289,7 +287,7 @@ class BaseAsyncPage(BasePage[ModelT], Generic[ModelT]):
         self._client = client
         self._options = options
 
-    async def __aiter__(self) -> AsyncIterator[ModelT]:
+    async def __aiter__(self) -> AsyncIterator[_T]:
         async for page in self.iter_pages():
             for item in page._get_page_items():
                 yield item
@@ -528,7 +526,7 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
         if data is None:
             return cast(ResponseT, None)
 
-        if cast_to is UnknownResponse:
+        if cast_to is object:
             return cast(ResponseT, data)
 
         try:
@@ -970,7 +968,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
 
     def _request_api_list(
         self,
-        model: Type[ModelT],
+        model: Type[object],
         page: Type[SyncPageT],
         options: FinalRequestOptions,
     ) -> SyncPageT:
@@ -1132,7 +1130,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
         self,
         path: str,
         *,
-        model: Type[ModelT],
+        model: Type[object],
         page: Type[SyncPageT],
         body: Body | None = None,
         options: RequestOptions = {},
@@ -1434,10 +1432,10 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
 
     def _request_api_list(
         self,
-        model: Type[ModelT],
+        model: Type[_T],
         page: Type[AsyncPageT],
         options: FinalRequestOptions,
-    ) -> AsyncPaginator[ModelT, AsyncPageT]:
+    ) -> AsyncPaginator[_T, AsyncPageT]:
         return AsyncPaginator(client=self, options=options, page_cls=page, model=model)
 
     @overload
@@ -1584,13 +1582,12 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
         self,
         path: str,
         *,
-        # TODO: support paginating `str`
-        model: Type[ModelT],
+        model: Type[_T],
         page: Type[AsyncPageT],
         body: Body | None = None,
         options: RequestOptions = {},
         method: str = "get",
-    ) -> AsyncPaginator[ModelT, AsyncPageT]:
+    ) -> AsyncPaginator[_T, AsyncPageT]:
         opts = FinalRequestOptions.construct(method=method, url=path, json_data=body, **options)
         return self._request_api_list(model, page, opts)
 
src/openai/_response.py
@@ -9,7 +9,7 @@ from typing_extensions import Awaitable, ParamSpec, override, get_origin
 
 import httpx
 
-from ._types import NoneType, UnknownResponse, BinaryResponseContent
+from ._types import NoneType, BinaryResponseContent
 from ._utils import is_given, extract_type_var_from_base
 from ._models import BaseModel, is_basemodel
 from ._constants import RAW_RESPONSE_HEADER
@@ -162,7 +162,7 @@ class APIResponse(Generic[R]):
         # `ResponseT` TypeVar, however if that TypeVar is ever updated in the future, then
         # this function would become unsafe but a type checker would not report an error.
         if (
-            cast_to is not UnknownResponse
+            cast_to is not object
             and not origin is list
             and not origin is dict
             and not origin is Union
src/openai/_types.py
@@ -258,11 +258,6 @@ class RequestOptions(TypedDict, total=False):
     idempotency_key: str
 
 
-# Sentinel class used when the response type is an object with an unknown schema
-class UnknownResponse:
-    ...
-
-
 # Sentinel class used until PEP 0661 is accepted
 class NotGiven:
     """
@@ -339,7 +334,17 @@ HeadersLike = Union[Headers, HeadersLikeProtocol]
 
 ResponseT = TypeVar(
     "ResponseT",
-    bound="Union[str, None, BaseModel, List[Any], Dict[str, Any], Response, UnknownResponse, ModelBuilderProtocol, BinaryResponseContent]",
+    bound=Union[
+        object,
+        str,
+        None,
+        "BaseModel",
+        List[Any],
+        Dict[str, Any],
+        Response,
+        ModelBuilderProtocol,
+        BinaryResponseContent,
+    ],
 )
 
 StrBytesIntFloat = Union[str, bytes, int, float]
src/openai/pagination.py
@@ -1,27 +1,28 @@
 # File generated from our OpenAPI spec by Stainless.
 
-from typing import Any, List, Generic, Optional, cast
+from typing import Any, List, Generic, TypeVar, Optional, cast
 from typing_extensions import Protocol, override, runtime_checkable
 
-from ._types import ModelT
 from ._base_client import BasePage, PageInfo, BaseSyncPage, BaseAsyncPage
 
 __all__ = ["SyncPage", "AsyncPage", "SyncCursorPage", "AsyncCursorPage"]
 
+_T = TypeVar("_T")
+
 
 @runtime_checkable
 class CursorPageItem(Protocol):
     id: Optional[str]
 
 
-class SyncPage(BaseSyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
+class SyncPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
     """Note: no pagination actually occurs yet, this is for forwards-compatibility."""
 
-    data: List[ModelT]
+    data: List[_T]
     object: str
 
     @override
-    def _get_page_items(self) -> List[ModelT]:
+    def _get_page_items(self) -> List[_T]:
         data = self.data
         if not data:
             return []
@@ -36,14 +37,14 @@ class SyncPage(BaseSyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
         return None
 
 
-class AsyncPage(BaseAsyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
+class AsyncPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
     """Note: no pagination actually occurs yet, this is for forwards-compatibility."""
 
-    data: List[ModelT]
+    data: List[_T]
     object: str
 
     @override
-    def _get_page_items(self) -> List[ModelT]:
+    def _get_page_items(self) -> List[_T]:
         data = self.data
         if not data:
             return []
@@ -58,11 +59,11 @@ class AsyncPage(BaseAsyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
         return None
 
 
-class SyncCursorPage(BaseSyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
-    data: List[ModelT]
+class SyncCursorPage(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
+    data: List[_T]
 
     @override
-    def _get_page_items(self) -> List[ModelT]:
+    def _get_page_items(self) -> List[_T]:
         data = self.data
         if not data:
             return []
@@ -82,11 +83,11 @@ class SyncCursorPage(BaseSyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
         return PageInfo(params={"after": item.id})
 
 
-class AsyncCursorPage(BaseAsyncPage[ModelT], BasePage[ModelT], Generic[ModelT]):
-    data: List[ModelT]
+class AsyncCursorPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
+    data: List[_T]
 
     @override
-    def _get_page_items(self) -> List[ModelT]:
+    def _get_page_items(self) -> List[_T]:
         data = self.data
         if not data:
             return []