From 05057a995cc0ce55ed2984844c78566e8a4069c9 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Wed, 16 Sep 2026 04:15:51 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `open_router.stt.create_transcription()`: `error.status[504]` **Added** * `open_router.stt.create_transcription_multipart()`: `error.status[504]` **Added** --- .speakeasy/gen.lock | 59 +++++++++++++------ .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 50 ++++++++++++++++ .speakeasy/workflow.lock | 10 ++-- RELEASES.md | 12 +++- .../gatewaytimeoutresponseerrordata.mdx | 14 +++++ docs/errors/gatewaytimeoutresponseerror.mdx | 14 +++++ docs/sdks/stt/README.mdx | 2 + pyproject.toml | 2 +- src/openrouter/_version.py | 4 +- src/openrouter/components/__init__.py | 8 +++ .../gatewaytimeoutresponseerrordata.py | 56 ++++++++++++++++++ src/openrouter/errors/__init__.py | 8 +++ .../errors/gatewaytimeoutresponse_error.py | 36 +++++++++++ src/openrouter/stt.py | 20 +++++++ uv.lock | 2 +- 16 files changed, 269 insertions(+), 30 deletions(-) create mode 100644 docs/components/gatewaytimeoutresponseerrordata.mdx create mode 100644 docs/errors/gatewaytimeoutresponseerror.mdx create mode 100644 src/openrouter/components/gatewaytimeoutresponseerrordata.py create mode 100644 src/openrouter/errors/gatewaytimeoutresponse_error.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 2996c30e..0594fbd6 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: c48cf606-fb42-4a45-9c23-8f0555307828 management: - docChecksum: 038d30c5aef2fef6f084584ab884a16d + docChecksum: 41450b2a23c27cabea1cbd738f7f3d0f docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.147 - configChecksum: 20548e0247292451a3ad3caa9cbf2455 + releaseVersion: 1.1.148 + configChecksum: 108162f643ed6236a5c7fc4650414a3a repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 8953de43-f3dc-4656-b71b-a33377cb6157 - pristine_commit_hash: 2d8db605a1914330be452a45ea2de26f22b96285 - pristine_tree_hash: 9733025a1344184739aeef9d7bf3ab5a580aeb2e + generation_id: 25704fa8-72cd-42df-ba42-96fc14ceff73 + pristine_commit_hash: e90a8d77058d982a17f891d045d214b3453eb542 + pristine_tree_hash: 59747e810ec8cbc53792616329ccbea882cfe01d features: python: acceptHeaders: 3.0.0 @@ -2288,6 +2288,10 @@ trackedFiles: id: 9c98ab0aea5a last_write_checksum: sha1:558bcf970e10b728252d8fab1f2e1a15b747b403 pristine_git_object: 384c9eac32dc42b655935f262e21ecd6d125dfa0 + docs/components/gatewaytimeoutresponseerrordata.mdx: + id: 3d1341a903a7 + last_write_checksum: sha1:f7ec75dfef3bd8349ea16e33e9d4e9f7e9cda53e + pristine_git_object: 281176afa506901325840158fd9b7790d610f23e docs/components/generationcontentdata.mdx: id: 030f8930b5df last_write_checksum: sha1:8cd824dc313a2f8c1aad0e35483f8591f8614170 @@ -6084,6 +6088,10 @@ trackedFiles: id: 224f2ffa6660 last_write_checksum: sha1:940ddd9376d3f0304037bc9142855a89e2d22014 pristine_git_object: 657b79d00920fdc803264dd740380fc1ef579466 + docs/errors/gatewaytimeoutresponseerror.mdx: + id: 91e883f3fe04 + last_write_checksum: sha1:7b64e2b1be6ba5abaacd91c322b1f8e90c765d9b + pristine_git_object: b16b713f23ec4d5b67e45dbae7019285330034e6 docs/errors/goneresponseerror.mdx: id: 98f44bb2779b last_write_checksum: sha1:5df38347f00816a1c77de490f21a2a3f1a14e170 @@ -7650,8 +7658,8 @@ trackedFiles: pristine_git_object: c7435646cf280b7b2fbb2805b2cde15b4c570896 docs/sdks/stt/README.mdx: id: 190b0dc9a5d1 - last_write_checksum: sha1:4988b2477ce52a14ef48998f05c4efe07b42a57b - pristine_git_object: 4c94c89e2de2c21457849fe2f05efd7ecb2fa51a + last_write_checksum: sha1:9af28fe51f720d2d59c6218242f01b29657f84e4 + pristine_git_object: c26c791ad58836eb027797345cc04bb50e0f22bf docs/sdks/tts/README.mdx: id: cd1132543884 last_write_checksum: sha1:806d6eb13442ca7b416b8f5d10b93fd34f568ad9 @@ -7670,8 +7678,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:422e6996a221ad815b6bbe5a869f966393f3cf8b - pristine_git_object: 9fab30af5315cf85645afeb2e94094d39257c8a4 + last_write_checksum: sha1:f5f51a8d3b4fd5b07cace20b646e455907ef475a + pristine_git_object: 9041c4037d67135017d6ed6cc2afc711ce777883 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7698,8 +7706,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:f56c9bd1893513031e700cac75d9269f948d110a - pristine_git_object: f770b2710fadd37adaac4c3de558b046ead36a0c + last_write_checksum: sha1:b9da8046b4649b3db1f7def7ff9132ec3d4a4b7b + pristine_git_object: abcd8bc4c2591dc7a373a816e98924135b9b57ad src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:1e0004d8d1d5d797e2b54cd1cabeb7f9489d08e9 @@ -7738,8 +7746,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:0b3014bec1e17210006b49d56fc9146b4674a8dc - pristine_git_object: caf6dc7f49e27316d9aab83150efd8f8c77841b5 + last_write_checksum: sha1:d02ded1fc4989a9f71fab0a2364bbc2e349e365c + pristine_git_object: dbc0ef59722d87b3a6e40498dce7424b98404257 src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -8736,6 +8744,10 @@ trackedFiles: id: ce20a4a9f32f last_write_checksum: sha1:d38e02465da7d7d4caed6a25b3602709236d9ce6 pristine_git_object: cfe434755a0c8f34cc8797777eee68311dbbd243 + src/openrouter/components/gatewaytimeoutresponseerrordata.py: + id: 46827cda3fa9 + last_write_checksum: sha1:d0f59517cd4f893d837a74d8bbb979f70895e5fc + pristine_git_object: fbc1a2f369076dfe94bde9e5dd79c69c5879e756 src/openrouter/components/generationcontentdata.py: id: 0140215b5b46 last_write_checksum: sha1:c3d877cd0fcbed4aed6e7c1956f72a799fa5b045 @@ -10326,8 +10338,8 @@ trackedFiles: pristine_git_object: 5c3a48759ba31aa633627707b68885b6cc367ddf src/openrouter/errors/__init__.py: id: 366154d0d60a - last_write_checksum: sha1:c061de179ca2762428f9dabe408444585fa613bf - pristine_git_object: c3c56fb2b1a256865a21e4e1b6236b3952c0765b + last_write_checksum: sha1:6e844e1119536e2b8905422028d54851ffd96465 + pristine_git_object: 90591064ba313afd447f6b4688ba8cd0f2ea9f9f src/openrouter/errors/badgatewayresponse_error.py: id: 818c3605ce23 last_write_checksum: sha1:f0307bff4a47f950c514d7d47de5690cac871bbb @@ -10348,6 +10360,10 @@ trackedFiles: id: 4c1d3e6c95a4 last_write_checksum: sha1:1b60f416077b959b45023e087076e5bd16972ae1 pristine_git_object: 97c14f31678ca2a6ef09a71f397eb2dd1a7ea701 + src/openrouter/errors/gatewaytimeoutresponse_error.py: + id: 1ceff856a7e6 + last_write_checksum: sha1:82f33ab961a1eb33650e005eb4fb4c1bb99b2b22 + pristine_git_object: b2549b03606fca2fef41b3924a9e15c7e036d512 src/openrouter/errors/goneresponse_error.py: id: 13e8901c2c57 last_write_checksum: sha1:0385d9500869cb406d064953c8e6fbdc75a671cf @@ -10914,8 +10930,8 @@ trackedFiles: pristine_git_object: 26433165a0b1c25d7bd3115b9b129b18f2dc9387 src/openrouter/stt.py: id: fc0c2f669423 - last_write_checksum: sha1:d3600ee8ba531bff703e279695b0c19a8ef64bcd - pristine_git_object: b8ffd2741a2113f80f9638bc7f8e4899025201eb + last_write_checksum: sha1:21cfc44c4d1bfe2bf9120984dbbff243a6e17e01 + pristine_git_object: aca821791a9e00493899688fe057f96ab14a1a2b src/openrouter/tts.py: id: 5055d4b95f1d last_write_checksum: sha1:74eb2b38ef34e4929ad826389862ecf8de3ecea1 @@ -11834,6 +11850,8 @@ examples: application/json: {"error": {"code": 413, "message": "Request payload too large"}} "403": application/json: {"error": {"code": 403, "message": "Only management keys can perform this operation"}} + "504": + application/json: {"error": {"code": 504, "message": "The operation was aborted due to timeout"}} speakeasy-default-create-audio-transcriptions-multipart: requestBody: multipart/form-data: {"file": "x-file: example.file", "model": "Escalade"} @@ -11864,6 +11882,8 @@ examples: application/json: {"error": {"code": 413, "message": "Request payload too large"}} "403": application/json: {"error": {"code": 403, "message": "Only management keys can perform this operation"}} + "504": + application/json: {"error": {"code": 504, "message": "The operation was aborted due to timeout"}} listBYOKKeys: speakeasy-default-list-BYOK-keys: parameters: @@ -12932,4 +12952,5 @@ examples: examplesVersion: 1.0.2 releaseNotes: | ## Python SDK Changes: - * `open_router.api_keys.get_current_key_metadata()`: `response.data.free_model_daily_requests` **Added** + * `open_router.stt.create_transcription()`: `error.status[504]` **Added** + * `open_router.stt.create_transcription_multipart()`: `error.status[504]` **Added** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 9cd17334..7a07f613 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.147 + version: 1.1.148 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 8b64d1f3..bace460c 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -9638,6 +9638,46 @@ components: - 'url' - 'title' type: 'object' + GatewayTimeoutResponse: + description: 'Gateway Timeout - Provider did not respond before the upstream deadline' + example: + error: + code: 504 + message: 'The operation was aborted due to timeout' + properties: + error: + $ref: '#/components/schemas/GatewayTimeoutResponseErrorData' + openrouter_metadata: + additionalProperties: {} + type: + - 'object' + - 'null' + user_id: + type: + - 'string' + - 'null' + required: + - 'error' + type: 'object' + GatewayTimeoutResponseErrorData: + description: 'Error data for GatewayTimeoutResponse' + example: + code: 504 + message: 'The operation was aborted due to timeout' + properties: + code: + type: 'integer' + message: + type: 'string' + metadata: + additionalProperties: {} + type: + - 'object' + - 'null' + required: + - 'code' + - 'message' + type: 'object' GenerationContentData: description: 'Stored prompt and completion content, plus the failure error when one was stored' example: @@ -29253,6 +29293,16 @@ paths: schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' + '504': + content: + application/json: + example: + error: + code: 504 + message: 'The operation was aborted due to timeout' + schema: + $ref: '#/components/schemas/GatewayTimeoutResponse' + description: 'Gateway Timeout - Provider did not respond before the upstream deadline' '524': content: application/json: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index a673f406..67971027 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,8 +2,8 @@ speakeasyVersion: 1.787.0 sources: OpenRouter API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:07a62ad9bd15927e02f7b528f1a2213e02d0a5369711fc73b777420a2adfbbc8 - sourceBlobDigest: sha256:51641883ede95564992c9cc99573bcac53fc67f4231860bdb65084276ea9b57f + sourceRevisionDigest: sha256:09c23da6b2bfa40fdab38be95b0569129da25958adf4e8414cd1c71526d0b569 + sourceBlobDigest: sha256:8d5529722484eb1c61521ec0d7a6d86f08a2bdc943c2a3debc69968cb4ab1130 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:07a62ad9bd15927e02f7b528f1a2213e02d0a5369711fc73b777420a2adfbbc8 - sourceBlobDigest: sha256:51641883ede95564992c9cc99573bcac53fc67f4231860bdb65084276ea9b57f + sourceRevisionDigest: sha256:09c23da6b2bfa40fdab38be95b0569129da25958adf4e8414cd1c71526d0b569 + sourceBlobDigest: sha256:8d5529722484eb1c61521ec0d7a6d86f08a2bdc943c2a3debc69968cb4ab1130 codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:7bb4aad9f897c1737ce1025896480f466142266c4803dfd522286aa49219b889 + codeSamplesRevisionDigest: sha256:2102c1a3aba8dca6a50204d92b4b8cfd6becf530e6f2450ec782695181655b5d workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index e91cf4d1..297634fa 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -2259,4 +2259,14 @@ Based on: ### Generated - [python v1.1.147] . ### Releases -- [PyPI v1.1.147] https://pypi.org/project/openrouter/1.1.147 - . \ No newline at end of file +- [PyPI v1.1.147] https://pypi.org/project/openrouter/1.1.147 - . + +## 2026-09-16 04:13:36 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.148] . +### Releases +- [PyPI v1.1.148] https://pypi.org/project/openrouter/1.1.148 - . \ No newline at end of file diff --git a/docs/components/gatewaytimeoutresponseerrordata.mdx b/docs/components/gatewaytimeoutresponseerrordata.mdx new file mode 100644 index 00000000..281176af --- /dev/null +++ b/docs/components/gatewaytimeoutresponseerrordata.mdx @@ -0,0 +1,14 @@ +--- +title: "GatewayTimeoutResponseErrorData" +--- + +Error data for GatewayTimeoutResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `code` | *int* | :heavy_check_mark: | N/A | +| `message` | *str* | :heavy_check_mark: | N/A | +| `metadata` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/errors/gatewaytimeoutresponseerror.mdx b/docs/errors/gatewaytimeoutresponseerror.mdx new file mode 100644 index 00000000..b16b713f --- /dev/null +++ b/docs/errors/gatewaytimeoutresponseerror.mdx @@ -0,0 +1,14 @@ +--- +title: "GatewayTimeoutResponseError" +--- + +Gateway Timeout - Provider did not respond before the upstream deadline + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `error` | [components.GatewayTimeoutResponseErrorData](../components/gatewaytimeoutresponseerrordata.mdx) | :heavy_check_mark: | Error data for GatewayTimeoutResponse | \{
"code": 504,
"message": "The operation was aborted due to timeout"
} | +| `openrouter_metadata` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | | +| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/sdks/stt/README.mdx b/docs/sdks/stt/README.mdx index 4c94c89e..c26c791a 100644 --- a/docs/sdks/stt/README.mdx +++ b/docs/sdks/stt/README.mdx @@ -76,6 +76,7 @@ with OpenRouter( | errors.InternalServerResponseError | 500 | application/json | | errors.BadGatewayResponseError | 502 | application/json | | errors.ServiceUnavailableResponseError | 503 | application/json | +| errors.GatewayTimeoutResponseError | 504 | application/json | | errors.EdgeNetworkTimeoutResponseError | 524 | application/json | | errors.ProviderOverloadedResponseError | 529 | application/json | | errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* | @@ -141,6 +142,7 @@ with OpenRouter( | errors.InternalServerResponseError | 500 | application/json | | errors.BadGatewayResponseError | 502 | application/json | | errors.ServiceUnavailableResponseError | 503 | application/json | +| errors.GatewayTimeoutResponseError | 504 | application/json | | errors.EdgeNetworkTimeoutResponseError | 524 | application/json | | errors.ProviderOverloadedResponseError | 529 | application/json | | errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 9fab30af..9041c403 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.147" +version = "1.1.148" description = "Official Python Client SDK for OpenRouter." authors = [{ name = "OpenRouter" },] readme = "README-PYPI.md" diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py index f770b271..abcd8bc4 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "1.1.147" +__version__: str = "1.1.148" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.147 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.148 2.914.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/__init__.py b/src/openrouter/components/__init__.py index caf6dc7f..dbc0ef59 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -1237,6 +1237,10 @@ FusionServerToolConfigTypedDict, ) from .fusionsource import FusionSource, FusionSourceTypedDict + from .gatewaytimeoutresponseerrordata import ( + GatewayTimeoutResponseErrorData, + GatewayTimeoutResponseErrorDataTypedDict, + ) from .generationcontentdata import ( GenerationContentData, GenerationContentDataOutput, @@ -4157,6 +4161,8 @@ "FusionServerToolOpenRouterTypedDict", "FusionSource", "FusionSourceTypedDict", + "GatewayTimeoutResponseErrorData", + "GatewayTimeoutResponseErrorDataTypedDict", "GenerationContentData", "GenerationContentDataOutput", "GenerationContentDataOutputTypedDict", @@ -6531,6 +6537,8 @@ "FusionServerToolConfigTypedDict": ".fusionservertoolconfig", "FusionSource": ".fusionsource", "FusionSourceTypedDict": ".fusionsource", + "GatewayTimeoutResponseErrorData": ".gatewaytimeoutresponseerrordata", + "GatewayTimeoutResponseErrorDataTypedDict": ".gatewaytimeoutresponseerrordata", "GenerationContentData": ".generationcontentdata", "GenerationContentDataOutput": ".generationcontentdata", "GenerationContentDataOutputTypedDict": ".generationcontentdata", diff --git a/src/openrouter/components/gatewaytimeoutresponseerrordata.py b/src/openrouter/components/gatewaytimeoutresponseerrordata.py new file mode 100644 index 00000000..fbc1a2f3 --- /dev/null +++ b/src/openrouter/components/gatewaytimeoutresponseerrordata.py @@ -0,0 +1,56 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from openrouter.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing import Any, Dict +from typing_extensions import NotRequired, TypedDict + + +class GatewayTimeoutResponseErrorDataTypedDict(TypedDict): + r"""Error data for GatewayTimeoutResponse""" + + code: int + message: str + metadata: NotRequired[Nullable[Dict[str, Any]]] + + +class GatewayTimeoutResponseErrorData(BaseModel): + r"""Error data for GatewayTimeoutResponse""" + + code: int + + message: str + + metadata: OptionalNullable[Dict[str, Any]] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["metadata"]) + nullable_fields = set(["metadata"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/openrouter/errors/__init__.py b/src/openrouter/errors/__init__.py index c3c56fb2..90591064 100644 --- a/src/openrouter/errors/__init__.py +++ b/src/openrouter/errors/__init__.py @@ -23,6 +23,10 @@ ForbiddenResponseError, ForbiddenResponseErrorData, ) + from .gatewaytimeoutresponse_error import ( + GatewayTimeoutResponseError, + GatewayTimeoutResponseErrorData, + ) from .goneresponse_error import GoneResponseError, GoneResponseErrorData from .internalserverresponse_error import ( InternalServerResponseError, @@ -77,6 +81,8 @@ "EdgeNetworkTimeoutResponseErrorData", "ForbiddenResponseError", "ForbiddenResponseErrorData", + "GatewayTimeoutResponseError", + "GatewayTimeoutResponseErrorData", "GoneResponseError", "GoneResponseErrorData", "InternalServerResponseError", @@ -118,6 +124,8 @@ "EdgeNetworkTimeoutResponseErrorData": ".edgenetworktimeoutresponse_error", "ForbiddenResponseError": ".forbiddenresponse_error", "ForbiddenResponseErrorData": ".forbiddenresponse_error", + "GatewayTimeoutResponseError": ".gatewaytimeoutresponse_error", + "GatewayTimeoutResponseErrorData": ".gatewaytimeoutresponse_error", "GoneResponseError": ".goneresponse_error", "GoneResponseErrorData": ".goneresponse_error", "InternalServerResponseError": ".internalserverresponse_error", diff --git a/src/openrouter/errors/gatewaytimeoutresponse_error.py b/src/openrouter/errors/gatewaytimeoutresponse_error.py new file mode 100644 index 00000000..b2549b03 --- /dev/null +++ b/src/openrouter/errors/gatewaytimeoutresponse_error.py @@ -0,0 +1,36 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from dataclasses import dataclass, field +import httpx +from openrouter.components import ( + gatewaytimeoutresponseerrordata as components_gatewaytimeoutresponseerrordata, +) +from openrouter.errors import OpenRouterError +from openrouter.types import BaseModel, OptionalNullable, UNSET +from typing import Any, Dict, Optional + + +class GatewayTimeoutResponseErrorData(BaseModel): + error: components_gatewaytimeoutresponseerrordata.GatewayTimeoutResponseErrorData + r"""Error data for GatewayTimeoutResponse""" + openrouter_metadata: OptionalNullable[Dict[str, Any]] = UNSET + user_id: OptionalNullable[str] = UNSET + + +@dataclass(unsafe_hash=True) +class GatewayTimeoutResponseError(OpenRouterError): + r"""Gateway Timeout - Provider did not respond before the upstream deadline""" + + data: GatewayTimeoutResponseErrorData = field(hash=False) + + def __init__( + self, + data: GatewayTimeoutResponseErrorData, + raw_response: httpx.Response, + body: Optional[str] = None, + ): + fallback = body or raw_response.text + message = str(data.error.message) or fallback + super().__init__(message, raw_response, body) + object.__setattr__(self, "data", data) diff --git a/src/openrouter/stt.py b/src/openrouter/stt.py index b8ffd274..aca82179 100644 --- a/src/openrouter/stt.py +++ b/src/openrouter/stt.py @@ -204,6 +204,11 @@ def create_transcription( errors.ServiceUnavailableResponseErrorData, http_res ) raise errors.ServiceUnavailableResponseError(response_data, http_res) + if utils.match_response(http_res, "504", "application/json"): + response_data = unmarshal_json_response( + errors.GatewayTimeoutResponseErrorData, http_res + ) + raise errors.GatewayTimeoutResponseError(response_data, http_res) if utils.match_response(http_res, "524", "application/json"): response_data = unmarshal_json_response( errors.EdgeNetworkTimeoutResponseErrorData, http_res @@ -419,6 +424,11 @@ async def create_transcription_async( errors.ServiceUnavailableResponseErrorData, http_res ) raise errors.ServiceUnavailableResponseError(response_data, http_res) + if utils.match_response(http_res, "504", "application/json"): + response_data = unmarshal_json_response( + errors.GatewayTimeoutResponseErrorData, http_res + ) + raise errors.GatewayTimeoutResponseError(response_data, http_res) if utils.match_response(http_res, "524", "application/json"): response_data = unmarshal_json_response( errors.EdgeNetworkTimeoutResponseErrorData, http_res @@ -626,6 +636,11 @@ def create_transcription_multipart( errors.ServiceUnavailableResponseErrorData, http_res ) raise errors.ServiceUnavailableResponseError(response_data, http_res) + if utils.match_response(http_res, "504", "application/json"): + response_data = unmarshal_json_response( + errors.GatewayTimeoutResponseErrorData, http_res + ) + raise errors.GatewayTimeoutResponseError(response_data, http_res) if utils.match_response(http_res, "524", "application/json"): response_data = unmarshal_json_response( errors.EdgeNetworkTimeoutResponseErrorData, http_res @@ -833,6 +848,11 @@ async def create_transcription_multipart_async( errors.ServiceUnavailableResponseErrorData, http_res ) raise errors.ServiceUnavailableResponseError(response_data, http_res) + if utils.match_response(http_res, "504", "application/json"): + response_data = unmarshal_json_response( + errors.GatewayTimeoutResponseErrorData, http_res + ) + raise errors.GatewayTimeoutResponseError(response_data, http_res) if utils.match_response(http_res, "524", "application/json"): response_data = unmarshal_json_response( errors.EdgeNetworkTimeoutResponseErrorData, http_res diff --git a/uv.lock b/uv.lock index 45d1f2cc..3ba93c5a 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.147" +version = "1.1.148" source = { editable = "." } dependencies = [ { name = "httpcore" }, From 12e2bff56da4409e255ccad8a9452e843c249359 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 04:15:58 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow