diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml
index 3fc0d7fd..e0f2f635 100644
--- a/.github/workflows/publish-pypi.yml
+++ b/.github/workflows/publish-pypi.yml
@@ -12,6 +12,9 @@ jobs:
publish:
name: publish
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ id-token: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -24,5 +27,3 @@ jobs:
- name: Publish to PyPI
run: |
bash ./bin/publish-pypi
- env:
- PYPI_TOKEN: ${{ secrets.PAYI_PYPI_TOKEN || secrets.PYPI_TOKEN }}
diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml
index 90f32161..14aeae5f 100644
--- a/.github/workflows/release-doctor.yml
+++ b/.github/workflows/release-doctor.yml
@@ -19,4 +19,3 @@ jobs:
bash ./bin/check-release-environment
env:
RELEASE_PLEASE_TOKEN: ${{ secrets.RELEASE_PLEASE_TOKEN }}
- PYPI_TOKEN: ${{ secrets.PAYI_PYPI_TOKEN || secrets.PYPI_TOKEN }}
diff --git a/api.md b/api.md
index 525f1ce7..b3f8d4e2 100644
--- a/api.md
+++ b/api.md
@@ -22,11 +22,11 @@ from payi.types import (
CostData,
CostDetails,
DefaultResponse,
+ Limit,
LimitHistoryResponse,
LimitResponse,
RequestsData,
TotalCostData,
- LimitListResponse,
)
```
@@ -35,7 +35,7 @@ Methods:
- client.limits.create(\*\*params) -> LimitResponse
- client.limits.retrieve(limit_id) -> LimitResponse
- client.limits.update(limit_id, \*\*params) -> LimitResponse
-- client.limits.list(\*\*params) -> SyncCursorPage[LimitListResponse]
+- client.limits.list(\*\*params) -> SyncCursorPage[Limit]
- client.limits.delete(limit_id) -> DefaultResponse
- client.limits.reset(limit_id, \*\*params) -> LimitHistoryResponse
@@ -59,6 +59,7 @@ Types:
from payi.types import (
BulkIngestRequest,
BulkIngestResponse,
+ FunctionCallInfo,
IngestRequest,
IngestResponse,
PayICommonModelsAPIRouterHeaderInfo,
@@ -76,6 +77,8 @@ Types:
```python
from payi.types import (
+ CategoryResourceMappedResource,
+ CategoryResourcePriceUnits,
CategoryResourceResponse,
CategoryResponse,
CategoryDeleteResponse,
diff --git a/bin/check-release-environment b/bin/check-release-environment
index 98d98fbc..7edad7c9 100644
--- a/bin/check-release-environment
+++ b/bin/check-release-environment
@@ -6,10 +6,6 @@ if [ -z "${RELEASE_PLEASE_TOKEN}" ]; then
errors+=("The RELEASE_PLEASE_TOKEN secret has not been set. Create a fine-grained GitHub PAT and add it as a repository secret.")
fi
-if [ -z "${PYPI_TOKEN}" ]; then
- errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.")
-fi
-
lenErrors=${#errors[@]}
if [[ lenErrors -gt 0 ]]; then
diff --git a/bin/publish-pypi b/bin/publish-pypi
index e72ca2fa..58957004 100644
--- a/bin/publish-pypi
+++ b/bin/publish-pypi
@@ -4,4 +4,8 @@ set -eux
rm -rf dist
mkdir -p dist
uv build
-uv publish --token=$PYPI_TOKEN
+if [ -n "${PYPI_TOKEN:-}" ]; then
+ uv publish --token=$PYPI_TOKEN
+else
+ uv publish
+fi
diff --git a/scripts/mock b/scripts/mock
index 70694fad..7b871f5f 100755
--- a/scripts/mock
+++ b/scripts/mock
@@ -11,7 +11,7 @@ elif [ -n "$STAINLESS_OPENAPI_SPEC_URL" ]; then
URL="$STAINLESS_OPENAPI_SPEC_URL"
else
# Embedded OpenAPI spec (base64-encoded, gzipped)
- EMBEDDED_SPEC="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"
+ EMBEDDED_SPEC="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"
SPEC_TMPFILE="$(mktemp)"
trap 'rm -f "$SPEC_TMPFILE"' EXIT
echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE"
diff --git a/src/payi/resources/categories/resources.py b/src/payi/resources/categories/resources.py
index 4ba5555e..54646c1d 100644
--- a/src/payi/resources/categories/resources.py
+++ b/src/payi/resources/categories/resources.py
@@ -21,6 +21,7 @@
from ..._base_client import AsyncPaginator, make_request_options
from ...types.categories import resource_list_params, resource_create_params
from ...types.category_resource_response import CategoryResourceResponse
+from ...types.category_resource_price_units_param import CategoryResourcePriceUnitsParam
__all__ = ["ResourcesResource", "AsyncResourcesResource"]
@@ -52,7 +53,7 @@ def create(
resource: str,
*,
category: str,
- units: Dict[str, resource_create_params.Units],
+ units: Dict[str, CategoryResourcePriceUnitsParam],
max_input_units: Optional[int] | Omit = omit,
max_output_units: Optional[int] | Omit = omit,
max_total_units: Optional[int] | Omit = omit,
@@ -267,7 +268,7 @@ async def create(
resource: str,
*,
category: str,
- units: Dict[str, resource_create_params.Units],
+ units: Dict[str, CategoryResourcePriceUnitsParam],
max_input_units: Optional[int] | Omit = omit,
max_output_units: Optional[int] | Omit = omit,
max_total_units: Optional[int] | Omit = omit,
diff --git a/src/payi/resources/ingest.py b/src/payi/resources/ingest.py
index 852bc23c..ba862ae5 100644
--- a/src/payi/resources/ingest.py
+++ b/src/payi/resources/ingest.py
@@ -23,6 +23,7 @@
from .._base_client import make_request_options
from ..types.ingest_response import IngestResponse
from ..types.bulk_ingest_response import BulkIngestResponse
+from ..types.function_call_info_param import FunctionCallInfoParam
from ..types.bulk_ingest_request_param import BulkIngestRequestParam
from ..types.shared_params.ingest_units import IngestUnits
from ..types.pay_i_common_models_api_router_header_info_param import PayICommonModelsAPIRouterHeaderInfoParam
@@ -110,8 +111,7 @@ def units(
provider_request_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit,
provider_request_json: Optional[str] | Omit = omit,
provider_request_reasoning_json: Optional[str] | Omit = omit,
- provider_response_function_calls: Optional[Iterable[ingest_units_params.ProviderResponseFunctionCall]]
- | Omit = omit,
+ provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]] | Omit = omit,
provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit,
provider_response_id: Optional[str] | Omit = omit,
provider_response_json: Union[str, SequenceNotStr[str], None] | Omit = omit,
@@ -341,8 +341,7 @@ async def units(
provider_request_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit,
provider_request_json: Optional[str] | Omit = omit,
provider_request_reasoning_json: Optional[str] | Omit = omit,
- provider_response_function_calls: Optional[Iterable[ingest_units_params.ProviderResponseFunctionCall]]
- | Omit = omit,
+ provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]] | Omit = omit,
provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit,
provider_response_id: Optional[str] | Omit = omit,
provider_response_json: Union[str, SequenceNotStr[str], None] | Omit = omit,
diff --git a/src/payi/resources/limits/limits.py b/src/payi/resources/limits/limits.py
index 14f3ce16..3284ce6e 100644
--- a/src/payi/resources/limits/limits.py
+++ b/src/payi/resources/limits/limits.py
@@ -28,10 +28,10 @@
async_to_streamed_response_wrapper,
)
from ...pagination import SyncCursorPage, AsyncCursorPage
+from ...types.limit import Limit
from ..._base_client import AsyncPaginator, make_request_options
from ...types.limit_response import LimitResponse
from ...types.default_response import DefaultResponse
-from ...types.limit_list_response import LimitListResponse
from ...types.limit_history_response import LimitHistoryResponse
__all__ = ["LimitsResource", "AsyncLimitsResource"]
@@ -199,7 +199,7 @@ def list(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SyncCursorPage[LimitListResponse]:
+ ) -> SyncCursorPage[Limit]:
"""
Get all Limits
@@ -214,7 +214,7 @@ def list(
"""
return self._get_api_list(
"/api/v1/limits",
- page=SyncCursorPage[LimitListResponse],
+ page=SyncCursorPage[Limit],
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
@@ -230,7 +230,7 @@ def list(
limit_list_params.LimitListParams,
),
),
- model=LimitListResponse,
+ model=Limit,
)
def delete(
@@ -469,7 +469,7 @@ def list(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> AsyncPaginator[LimitListResponse, AsyncCursorPage[LimitListResponse]]:
+ ) -> AsyncPaginator[Limit, AsyncCursorPage[Limit]]:
"""
Get all Limits
@@ -484,7 +484,7 @@ def list(
"""
return self._get_api_list(
"/api/v1/limits",
- page=AsyncCursorPage[LimitListResponse],
+ page=AsyncCursorPage[Limit],
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
@@ -500,7 +500,7 @@ def list(
limit_list_params.LimitListParams,
),
),
- model=LimitListResponse,
+ model=Limit,
)
async def delete(
diff --git a/src/payi/types/__init__.py b/src/payi/types/__init__.py
index 6513fbfe..cc5d5d77 100644
--- a/src/payi/types/__init__.py
+++ b/src/payi/types/__init__.py
@@ -2,6 +2,7 @@
from __future__ import annotations
+from .limit import Limit as Limit
from .shared import (
APIError as APIError,
IngestUnits as IngestUnits,
@@ -26,17 +27,20 @@
from .limit_reset_params import LimitResetParams as LimitResetParams
from .ingest_units_params import IngestUnitsParams as IngestUnitsParams
from .limit_create_params import LimitCreateParams as LimitCreateParams
-from .limit_list_response import LimitListResponse as LimitListResponse
from .limit_update_params import LimitUpdateParams as LimitUpdateParams
from .bulk_ingest_response import BulkIngestResponse as BulkIngestResponse
from .category_list_params import CategoryListParams as CategoryListParams
from .limit_history_response import LimitHistoryResponse as LimitHistoryResponse
from .category_delete_response import CategoryDeleteResponse as CategoryDeleteResponse
+from .function_call_info_param import FunctionCallInfoParam as FunctionCallInfoParam
from .bulk_ingest_request_param import BulkIngestRequestParam as BulkIngestRequestParam
from .category_resource_response import CategoryResourceResponse as CategoryResourceResponse
from .use_case_instance_response import UseCaseInstanceResponse as UseCaseInstanceResponse
+from .category_resource_price_units import CategoryResourcePriceUnits as CategoryResourcePriceUnits
from .category_list_resources_params import CategoryListResourcesParams as CategoryListResourcesParams
from .category_delete_resource_response import CategoryDeleteResourceResponse as CategoryDeleteResourceResponse
+from .category_resource_mapped_resource import CategoryResourceMappedResource as CategoryResourceMappedResource
+from .category_resource_price_units_param import CategoryResourcePriceUnitsParam as CategoryResourcePriceUnitsParam
from .pay_i_common_models_api_router_header_info_param import (
PayICommonModelsAPIRouterHeaderInfoParam as PayICommonModelsAPIRouterHeaderInfoParam,
)
diff --git a/src/payi/types/bulk_ingest_request_param.py b/src/payi/types/bulk_ingest_request_param.py
index f1351dbe..97870fe6 100644
--- a/src/payi/types/bulk_ingest_request_param.py
+++ b/src/payi/types/bulk_ingest_request_param.py
@@ -8,16 +8,11 @@
from .._types import SequenceNotStr
from .._utils import PropertyInfo
+from .function_call_info_param import FunctionCallInfoParam
from .shared_params.ingest_units import IngestUnits
from .pay_i_common_models_api_router_header_info_param import PayICommonModelsAPIRouterHeaderInfoParam
-__all__ = ["BulkIngestRequestParam", "ProviderResponseFunctionCall"]
-
-
-class ProviderResponseFunctionCall(TypedDict, total=False):
- name: Required[str]
-
- arguments: Optional[str]
+__all__ = ["BulkIngestRequestParam"]
class BulkIngestRequestParam(TypedDict, total=False):
@@ -43,7 +38,7 @@ class BulkIngestRequestParam(TypedDict, total=False):
provider_request_reasoning_json: Optional[str]
- provider_response_function_calls: Optional[Iterable[ProviderResponseFunctionCall]]
+ provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]]
provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]]
diff --git a/src/payi/types/categories/resource_create_params.py b/src/payi/types/categories/resource_create_params.py
index 4ae2a602..2335d61e 100644
--- a/src/payi/types/categories/resource_create_params.py
+++ b/src/payi/types/categories/resource_create_params.py
@@ -7,14 +7,15 @@
from typing_extensions import Required, Annotated, TypedDict
from ..._utils import PropertyInfo
+from ..category_resource_price_units_param import CategoryResourcePriceUnitsParam
-__all__ = ["ResourceCreateParams", "Units"]
+__all__ = ["ResourceCreateParams"]
class ResourceCreateParams(TypedDict, total=False):
category: Required[str]
- units: Required[Dict[str, Units]]
+ units: Required[Dict[str, CategoryResourcePriceUnitsParam]]
max_input_units: Optional[int]
@@ -23,9 +24,3 @@ class ResourceCreateParams(TypedDict, total=False):
max_total_units: Optional[int]
start_timestamp: Annotated[Union[str, datetime, None], PropertyInfo(format="iso8601")]
-
-
-class Units(TypedDict, total=False):
- input_price: float
-
- output_price: float
diff --git a/src/payi/types/category_resource_mapped_resource.py b/src/payi/types/category_resource_mapped_resource.py
new file mode 100644
index 00000000..b87ac924
--- /dev/null
+++ b/src/payi/types/category_resource_mapped_resource.py
@@ -0,0 +1,18 @@
+# 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__ = ["CategoryResourceMappedResource"]
+
+
+class CategoryResourceMappedResource(BaseModel):
+ category: Optional[str] = None
+
+ resource: Optional[str] = None
+
+ scope: Optional[Literal["global", "datazone", "region"]] = None
+
+ sub_scope: Optional[str] = None
diff --git a/src/payi/types/category_resource_price_units.py b/src/payi/types/category_resource_price_units.py
new file mode 100644
index 00000000..41629998
--- /dev/null
+++ b/src/payi/types/category_resource_price_units.py
@@ -0,0 +1,13 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Optional
+
+from .._models import BaseModel
+
+__all__ = ["CategoryResourcePriceUnits"]
+
+
+class CategoryResourcePriceUnits(BaseModel):
+ input_price: Optional[float] = None
+
+ output_price: Optional[float] = None
diff --git a/src/payi/types/category_resource_price_units_param.py b/src/payi/types/category_resource_price_units_param.py
new file mode 100644
index 00000000..6cd142f2
--- /dev/null
+++ b/src/payi/types/category_resource_price_units_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_extensions import TypedDict
+
+__all__ = ["CategoryResourcePriceUnitsParam"]
+
+
+class CategoryResourcePriceUnitsParam(TypedDict, total=False):
+ input_price: float
+
+ output_price: float
diff --git a/src/payi/types/category_resource_response.py b/src/payi/types/category_resource_response.py
index b6548e30..53b2b2f1 100644
--- a/src/payi/types/category_resource_response.py
+++ b/src/payi/types/category_resource_response.py
@@ -2,26 +2,14 @@
from typing import Dict, Optional
from datetime import datetime
-from typing_extensions import Literal
from pydantic import Field as FieldInfo
from .._models import BaseModel
+from .category_resource_price_units import CategoryResourcePriceUnits
+from .category_resource_mapped_resource import CategoryResourceMappedResource
-__all__ = [
- "CategoryResourceResponse",
- "Units",
- "AwsBedrockResource",
- "AzureResource",
- "GoogleVertexResource",
- "MappedResource",
-]
-
-
-class Units(BaseModel):
- input_price: Optional[float] = None
-
- output_price: Optional[float] = None
+__all__ = ["CategoryResourceResponse", "AwsBedrockResource", "AzureResource", "GoogleVertexResource"]
class AwsBedrockResource(BaseModel):
@@ -36,16 +24,6 @@ class GoogleVertexResource(BaseModel):
gsus: int
-class MappedResource(BaseModel):
- category: Optional[str] = None
-
- resource: Optional[str] = None
-
- scope: Optional[Literal["global", "datazone", "region"]] = None
-
- sub_scope: Optional[str] = None
-
-
class CategoryResourceResponse(BaseModel):
active: bool
@@ -59,7 +37,7 @@ class CategoryResourceResponse(BaseModel):
start_timestamp: datetime
- units: Dict[str, Units]
+ units: Dict[str, CategoryResourcePriceUnits]
aliased_resource: Optional[str] = None
@@ -81,7 +59,7 @@ class CategoryResourceResponse(BaseModel):
large_context_threshold: Optional[int] = None
- mapped_resource: Optional[MappedResource] = None
+ mapped_resource: Optional[CategoryResourceMappedResource] = None
max_input_units: Optional[int] = None
diff --git a/src/payi/types/function_call_info_param.py b/src/payi/types/function_call_info_param.py
new file mode 100644
index 00000000..8cbe72d1
--- /dev/null
+++ b/src/payi/types/function_call_info_param.py
@@ -0,0 +1,14 @@
+# 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 Required, TypedDict
+
+__all__ = ["FunctionCallInfoParam"]
+
+
+class FunctionCallInfoParam(TypedDict, total=False):
+ name: Required[str]
+
+ arguments: Optional[str]
diff --git a/src/payi/types/ingest_units_params.py b/src/payi/types/ingest_units_params.py
index dec8a30a..518ed909 100644
--- a/src/payi/types/ingest_units_params.py
+++ b/src/payi/types/ingest_units_params.py
@@ -8,10 +8,11 @@
from .._types import SequenceNotStr
from .._utils import PropertyInfo
+from .function_call_info_param import FunctionCallInfoParam
from .shared_params.ingest_units import IngestUnits
from .pay_i_common_models_api_router_header_info_param import PayICommonModelsAPIRouterHeaderInfoParam
-__all__ = ["IngestUnitsParams", "ProviderResponseFunctionCall"]
+__all__ = ["IngestUnitsParams"]
class IngestUnitsParams(TypedDict, total=False):
@@ -33,7 +34,7 @@ class IngestUnitsParams(TypedDict, total=False):
provider_request_reasoning_json: Optional[str]
- provider_response_function_calls: Optional[Iterable[ProviderResponseFunctionCall]]
+ provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]]
provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]]
diff --git a/src/payi/types/limit_list_response.py b/src/payi/types/limit.py
similarity index 88%
rename from src/payi/types/limit_list_response.py
rename to src/payi/types/limit.py
index b2d2fc74..242f4f72 100644
--- a/src/payi/types/limit_list_response.py
+++ b/src/payi/types/limit.py
@@ -7,10 +7,10 @@
from .._models import BaseModel
from .total_cost_data import TotalCostData
-__all__ = ["LimitListResponse"]
+__all__ = ["Limit"]
-class LimitListResponse(BaseModel):
+class Limit(BaseModel):
limit_creation_timestamp: datetime
limit_id: str
diff --git a/src/payi/types/limit_response.py b/src/payi/types/limit_response.py
index 6e2cd01a..b1e3e0bc 100644
--- a/src/payi/types/limit_response.py
+++ b/src/payi/types/limit_response.py
@@ -1,31 +1,11 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from typing import Optional
-from datetime import datetime
-from typing_extensions import Literal
+from .limit import Limit
from .._models import BaseModel
-from .total_cost_data import TotalCostData
-__all__ = ["LimitResponse", "Limit"]
-
-
-class Limit(BaseModel):
- limit_creation_timestamp: datetime
-
- limit_id: str
-
- limit_name: str
-
- limit_type: Literal["block", "allow"]
-
- limit_update_timestamp: datetime
-
- max: float
-
- totals: TotalCostData
-
- threshold: Optional[float] = None
+__all__ = ["LimitResponse"]
class LimitResponse(BaseModel):
diff --git a/tests/api_resources/test_limits.py b/tests/api_resources/test_limits.py
index 47c8a3f7..05766c23 100644
--- a/tests/api_resources/test_limits.py
+++ b/tests/api_resources/test_limits.py
@@ -9,9 +9,9 @@
from payi import Payi, AsyncPayi
from payi.types import (
+ Limit,
LimitResponse,
DefaultResponse,
- LimitListResponse,
LimitHistoryResponse,
)
from payi._utils import parse_datetime
@@ -158,7 +158,7 @@ def test_path_params_update(self, client: Payi) -> None:
@parametrize
def test_method_list(self, client: Payi) -> None:
limit = client.limits.list()
- assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(SyncCursorPage[Limit], limit, path=["response"])
@parametrize
def test_method_list_with_all_params(self, client: Payi) -> None:
@@ -168,7 +168,7 @@ def test_method_list_with_all_params(self, client: Payi) -> None:
limit_name="limit_name",
sort_ascending=True,
)
- assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(SyncCursorPage[Limit], limit, path=["response"])
@parametrize
def test_raw_response_list(self, client: Payi) -> None:
@@ -177,7 +177,7 @@ def test_raw_response_list(self, client: Payi) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
limit = response.parse()
- assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(SyncCursorPage[Limit], limit, path=["response"])
@parametrize
def test_streaming_response_list(self, client: Payi) -> None:
@@ -186,7 +186,7 @@ def test_streaming_response_list(self, client: Payi) -> None:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
limit = response.parse()
- assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(SyncCursorPage[Limit], limit, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -414,7 +414,7 @@ async def test_path_params_update(self, async_client: AsyncPayi) -> None:
@parametrize
async def test_method_list(self, async_client: AsyncPayi) -> None:
limit = await async_client.limits.list()
- assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"])
@parametrize
async def test_method_list_with_all_params(self, async_client: AsyncPayi) -> None:
@@ -424,7 +424,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncPayi) -> Non
limit_name="limit_name",
sort_ascending=True,
)
- assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"])
@parametrize
async def test_raw_response_list(self, async_client: AsyncPayi) -> None:
@@ -433,7 +433,7 @@ async def test_raw_response_list(self, async_client: AsyncPayi) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
limit = await response.parse()
- assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"])
@parametrize
async def test_streaming_response_list(self, async_client: AsyncPayi) -> None:
@@ -442,7 +442,7 @@ async def test_streaming_response_list(self, async_client: AsyncPayi) -> None:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
limit = await response.parse()
- assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"])
+ assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"])
assert cast(Any, response.is_closed) is True
diff --git a/uv.lock b/uv.lock
index 977d9ae4..bf0a6ff2 100644
--- a/uv.lock
+++ b/uv.lock
@@ -812,7 +812,7 @@ wheels = [
[[package]]
name = "payi"
-version = "0.1.0a180"
+version = "0.1.0a181"
source = { editable = "." }
dependencies = [
{ name = "anyio" },