Commit e01af1c2

stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
2025-06-17 03:05:03
feat(api): manual updates
1 parent cc2c1fc
Changed files (5)
src
openai
resources
fine_tuning
checkpoints
types
fine_tuning
tests
api_resources
fine_tuning
src/openai/resources/fine_tuning/checkpoints/permissions.py
@@ -9,11 +9,11 @@ import httpx
 
 from .... import _legacy_response
 from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
-from ...._utils import maybe_transform, async_maybe_transform
+from ...._utils import 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 ....pagination import SyncPage, AsyncPage
+from ....pagination import SyncPage, AsyncPage, SyncCursorPage, AsyncCursorPage
 from ...._base_client import AsyncPaginator, make_request_options
 from ....types.fine_tuning.checkpoints import permission_create_params, permission_retrieve_params
 from ....types.fine_tuning.checkpoints.permission_create_response import PermissionCreateResponse
@@ -101,7 +101,7 @@ class Permissions(SyncAPIResource):
         extra_query: Query | None = None,
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
-    ) -> PermissionRetrieveResponse:
+    ) -> SyncCursorPage[PermissionRetrieveResponse]:
         """
         **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).
 
@@ -129,8 +129,9 @@ class Permissions(SyncAPIResource):
             raise ValueError(
                 f"Expected a non-empty value for `fine_tuned_model_checkpoint` but received {fine_tuned_model_checkpoint!r}"
             )
-        return self._get(
+        return self._get_api_list(
             f"/fine_tuning/checkpoints/{fine_tuned_model_checkpoint}/permissions",
+            page=SyncCursorPage[PermissionRetrieveResponse],
             options=make_request_options(
                 extra_headers=extra_headers,
                 extra_query=extra_query,
@@ -146,7 +147,7 @@ class Permissions(SyncAPIResource):
                     permission_retrieve_params.PermissionRetrieveParams,
                 ),
             ),
-            cast_to=PermissionRetrieveResponse,
+            model=PermissionRetrieveResponse,
         )
 
     def delete(
@@ -255,7 +256,7 @@ class AsyncPermissions(AsyncAPIResource):
             method="post",
         )
 
-    async def retrieve(
+    def retrieve(
         self,
         fine_tuned_model_checkpoint: str,
         *,
@@ -269,7 +270,7 @@ class AsyncPermissions(AsyncAPIResource):
         extra_query: Query | None = None,
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
-    ) -> PermissionRetrieveResponse:
+    ) -> AsyncPaginator[PermissionRetrieveResponse, AsyncCursorPage[PermissionRetrieveResponse]]:
         """
         **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).
 
@@ -297,14 +298,15 @@ class AsyncPermissions(AsyncAPIResource):
             raise ValueError(
                 f"Expected a non-empty value for `fine_tuned_model_checkpoint` but received {fine_tuned_model_checkpoint!r}"
             )
-        return await self._get(
+        return self._get_api_list(
             f"/fine_tuning/checkpoints/{fine_tuned_model_checkpoint}/permissions",
+            page=AsyncCursorPage[PermissionRetrieveResponse],
             options=make_request_options(
                 extra_headers=extra_headers,
                 extra_query=extra_query,
                 extra_body=extra_body,
                 timeout=timeout,
-                query=await async_maybe_transform(
+                query=maybe_transform(
                     {
                         "after": after,
                         "limit": limit,
@@ -314,7 +316,7 @@ class AsyncPermissions(AsyncAPIResource):
                     permission_retrieve_params.PermissionRetrieveParams,
                 ),
             ),
-            cast_to=PermissionRetrieveResponse,
+            model=PermissionRetrieveResponse,
         )
 
     async def delete(
src/openai/types/fine_tuning/checkpoints/permission_retrieve_response.py
@@ -1,14 +1,13 @@
 # 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__ = ["PermissionRetrieveResponse", "Data"]
+__all__ = ["PermissionRetrieveResponse"]
 
 
-class Data(BaseModel):
+class PermissionRetrieveResponse(BaseModel):
     id: str
     """The permission identifier, which can be referenced in the API endpoints."""
 
@@ -20,15 +19,3 @@ class Data(BaseModel):
 
     project_id: str
     """The project identifier that the permission is for."""
-
-
-class PermissionRetrieveResponse(BaseModel):
-    data: List[Data]
-
-    has_more: bool
-
-    object: Literal["list"]
-
-    first_id: Optional[str] = None
-
-    last_id: Optional[str] = None
tests/api_resources/fine_tuning/checkpoints/test_permissions.py
@@ -9,7 +9,7 @@ import pytest
 
 from openai import OpenAI, AsyncOpenAI
 from tests.utils import assert_matches_type
-from openai.pagination import SyncPage, AsyncPage
+from openai.pagination import SyncPage, AsyncPage, SyncCursorPage, AsyncCursorPage
 from openai.types.fine_tuning.checkpoints import (
     PermissionCreateResponse,
     PermissionDeleteResponse,
@@ -71,7 +71,7 @@ class TestPermissions:
         permission = client.fine_tuning.checkpoints.permissions.retrieve(
             fine_tuned_model_checkpoint="ft-AF1WoRqd3aJAHsqc9NY7iL8F",
         )
-        assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+        assert_matches_type(SyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
     @parametrize
     def test_method_retrieve_with_all_params(self, client: OpenAI) -> None:
@@ -82,7 +82,7 @@ class TestPermissions:
             order="ascending",
             project_id="project_id",
         )
-        assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+        assert_matches_type(SyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
     @parametrize
     def test_raw_response_retrieve(self, client: OpenAI) -> None:
@@ -93,7 +93,7 @@ class TestPermissions:
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
         permission = response.parse()
-        assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+        assert_matches_type(SyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
     @parametrize
     def test_streaming_response_retrieve(self, client: OpenAI) -> None:
@@ -104,7 +104,7 @@ class TestPermissions:
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
 
             permission = response.parse()
-            assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+            assert_matches_type(SyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
         assert cast(Any, response.is_closed) is True
 
@@ -220,7 +220,7 @@ class TestAsyncPermissions:
         permission = await async_client.fine_tuning.checkpoints.permissions.retrieve(
             fine_tuned_model_checkpoint="ft-AF1WoRqd3aJAHsqc9NY7iL8F",
         )
-        assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+        assert_matches_type(AsyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
     @parametrize
     async def test_method_retrieve_with_all_params(self, async_client: AsyncOpenAI) -> None:
@@ -231,7 +231,7 @@ class TestAsyncPermissions:
             order="ascending",
             project_id="project_id",
         )
-        assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+        assert_matches_type(AsyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
     @parametrize
     async def test_raw_response_retrieve(self, async_client: AsyncOpenAI) -> None:
@@ -242,7 +242,7 @@ class TestAsyncPermissions:
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
         permission = response.parse()
-        assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+        assert_matches_type(AsyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
     @parametrize
     async def test_streaming_response_retrieve(self, async_client: AsyncOpenAI) -> None:
@@ -253,7 +253,7 @@ class TestAsyncPermissions:
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
 
             permission = await response.parse()
-            assert_matches_type(PermissionRetrieveResponse, permission, path=["response"])
+            assert_matches_type(AsyncCursorPage[PermissionRetrieveResponse], permission, path=["response"])
 
         assert cast(Any, response.is_closed) is True
 
.stats.yml
@@ -1,4 +1,4 @@
 configured_endpoints: 111
 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-9e41d2d5471d2c28bff0d616f4476f5b0e6c541ef4cb51bdaaef5fdf5e13c8b2.yml
 openapi_spec_hash: 86f765e18d00e32cf2ce9db7ab84d946
-config_hash: fd2af1d5eff0995bb7dc02ac9a34851d
+config_hash: dc5515e257676a27cb1ace1784aa92b3
api.md
@@ -293,7 +293,7 @@ from openai.types.fine_tuning.checkpoints import (
 Methods:
 
 - <code title="post /fine_tuning/checkpoints/{fine_tuned_model_checkpoint}/permissions">client.fine_tuning.checkpoints.permissions.<a href="./src/openai/resources/fine_tuning/checkpoints/permissions.py">create</a>(fine_tuned_model_checkpoint, \*\*<a href="src/openai/types/fine_tuning/checkpoints/permission_create_params.py">params</a>) -> <a href="./src/openai/types/fine_tuning/checkpoints/permission_create_response.py">SyncPage[PermissionCreateResponse]</a></code>
-- <code title="get /fine_tuning/checkpoints/{fine_tuned_model_checkpoint}/permissions">client.fine_tuning.checkpoints.permissions.<a href="./src/openai/resources/fine_tuning/checkpoints/permissions.py">retrieve</a>(fine_tuned_model_checkpoint, \*\*<a href="src/openai/types/fine_tuning/checkpoints/permission_retrieve_params.py">params</a>) -> <a href="./src/openai/types/fine_tuning/checkpoints/permission_retrieve_response.py">PermissionRetrieveResponse</a></code>
+- <code title="get /fine_tuning/checkpoints/{fine_tuned_model_checkpoint}/permissions">client.fine_tuning.checkpoints.permissions.<a href="./src/openai/resources/fine_tuning/checkpoints/permissions.py">retrieve</a>(fine_tuned_model_checkpoint, \*\*<a href="src/openai/types/fine_tuning/checkpoints/permission_retrieve_params.py">params</a>) -> <a href="./src/openai/types/fine_tuning/checkpoints/permission_retrieve_response.py">SyncCursorPage[PermissionRetrieveResponse]</a></code>
 - <code title="delete /fine_tuning/checkpoints/{fine_tuned_model_checkpoint}/permissions/{permission_id}">client.fine_tuning.checkpoints.permissions.<a href="./src/openai/resources/fine_tuning/checkpoints/permissions.py">delete</a>(permission_id, \*, fine_tuned_model_checkpoint) -> <a href="./src/openai/types/fine_tuning/checkpoints/permission_delete_response.py">PermissionDeleteResponse</a></code>
 
 ## Alpha