From cd585a1a231bf1a96b1a30a0f7687449f1b427c2 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Mon, 14 Sep 2026 08:19:18 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `open_router.video_generation.get_video_content()`: `error` **Changed** --- .speakeasy/gen.lock | 60 +++++++++++++------ .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 20 +++++++ .speakeasy/workflow.lock | 10 ++-- RELEASES.md | 12 +++- docs/components/goneresponseerrordata.mdx | 14 +++++ docs/errors/goneresponseerror.mdx | 14 +++++ docs/sdks/videogeneration/README.mdx | 2 + pyproject.toml | 2 +- src/openrouter/_version.py | 4 +- src/openrouter/components/__init__.py | 8 +++ .../components/goneresponseerrordata.py | 56 +++++++++++++++++ src/openrouter/errors/__init__.py | 5 ++ src/openrouter/errors/goneresponse_error.py | 36 +++++++++++ src/openrouter/video_generation.py | 24 ++++++++ uv.lock | 2 +- 16 files changed, 241 insertions(+), 30 deletions(-) create mode 100644 docs/components/goneresponseerrordata.mdx create mode 100644 docs/errors/goneresponseerror.mdx create mode 100644 src/openrouter/components/goneresponseerrordata.py create mode 100644 src/openrouter/errors/goneresponse_error.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 76d1b963..09ba2b74 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: a599be75aed8b69f78b5ca5f88fa15ca + docChecksum: a419a773e84576dee3ea3d63771b24c6 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.139 - configChecksum: f00acb60f6feb05035238a32134b3f17 + releaseVersion: 1.1.140 + configChecksum: 41a1c52cad5c110bcfeaf13200432ae5 repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 707bcdd9-394a-4a0e-aa73-f6085861ee91 - pristine_commit_hash: c93151aa6efbce20e029fab0dd1cf17e4641af99 - pristine_tree_hash: 856ae325353385e4a0bdb4955903fed09ddfa10a + generation_id: 3c7f9333-5c0b-450e-8198-64d07bf6670f + pristine_commit_hash: c1273ddd90890baf1cb6297a9ac034b511f01651 + pristine_tree_hash: 4aaa32abf599a02c3438691b551cb38d2cb9a429 features: python: acceptHeaders: 3.0.0 @@ -2348,6 +2348,10 @@ trackedFiles: id: c8d0c4683019 last_write_checksum: sha1:5d10c3c4510cdc869a740deee62c31e9d2b02cc9 pristine_git_object: 42ef3f3487d6e55ad13f7ae93edd146fd46332bf + docs/components/goneresponseerrordata.mdx: + id: e6b031c25894 + last_write_checksum: sha1:89e7ba22f189a86dd12757f9f5ea3d25175b537b + pristine_git_object: 79c5d5a9ffb4b58a64a86e52089c013bda92cb5c docs/components/granttype.mdx: id: f8403fbcc98a last_write_checksum: sha1:4dbfadaf6168b7b65f581a15d54b0b42e6f674ea @@ -6076,6 +6080,10 @@ trackedFiles: id: 224f2ffa6660 last_write_checksum: sha1:940ddd9376d3f0304037bc9142855a89e2d22014 pristine_git_object: 657b79d00920fdc803264dd740380fc1ef579466 + docs/errors/goneresponseerror.mdx: + id: 98f44bb2779b + last_write_checksum: sha1:5df38347f00816a1c77de490f21a2a3f1a14e170 + pristine_git_object: 3584e71b6b73845bd7871fa1bd25ad91f500dc01 docs/errors/internalserverresponseerror.mdx: id: e3cb72f51ee2 last_write_checksum: sha1:144494af097e80aa9fdb921d094b2473bc598165 @@ -7646,8 +7654,8 @@ trackedFiles: pristine_git_object: 80af14ecc66831a2a2d09382a917731406813ccd docs/sdks/videogeneration/README.mdx: id: 9a8fa04c3872 - last_write_checksum: sha1:55046a594a51e6ceedc5c0f2fdfab4ea16994cc9 - pristine_git_object: c77d333eaf3d02a52e159e77e6eca4ac90e23ec8 + last_write_checksum: sha1:44941eaef3c9aa671e2f74e20c08adf6fd8fcfa4 + pristine_git_object: b73d8195dba16b9d6edfd2477dcfeaadc2512bfa docs/sdks/workspaces/README.mdx: id: 0c75d023ef6b last_write_checksum: sha1:25592df93519c9e742e7c2a3df49ea2337a47d64 @@ -7658,8 +7666,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:9da1afbfd132ff53f198f0e9074bdeb4d9a5b687 - pristine_git_object: b7cdb07881a3c698170b1e28b1ffcdf4266f9e52 + last_write_checksum: sha1:e470e79f9113582e7bee19bfb3cfffb5e41402a4 + pristine_git_object: 26c7e6696c2f7ab35e9bcbac776607e7a5221902 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7686,8 +7694,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:0b3b38f503322b22ed3b3a1b3b4b40b7c110f042 - pristine_git_object: e03223d33ee5ca4ae608ec5dd6099c39f7c8b27e + last_write_checksum: sha1:4194998dd112c33b43cec17fae91de373ad9afee + pristine_git_object: 922892c14946dd4ab25df8a217ac5f4f0a99ba51 src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:1e0004d8d1d5d797e2b54cd1cabeb7f9489d08e9 @@ -7726,8 +7734,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:3b30a6e4f19e90e835bc26b66e832f21126d3ddf - pristine_git_object: 96c18dbf6603bd5817b88aec77d4351044a73439 + last_write_checksum: sha1:5835a3c880006bd39d83bc1659ea2e81a162e9ce + pristine_git_object: 9c8f3446387d1d95a9235ca8bc37eba11c9f0b23 src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -8776,6 +8784,10 @@ trackedFiles: id: d993d0c4c3da last_write_checksum: sha1:918535730d1c352bcc8fd2342e1c4cea89bc357f pristine_git_object: acda534cb0ced2a391479b720434cf0f57f46276 + src/openrouter/components/goneresponseerrordata.py: + id: 41f97eceb29a + last_write_checksum: sha1:db3982c6253f35b4311c91f0c1eb4242c09510d2 + pristine_git_object: 1268e32c9058ed4feb7482458a64366c56201676 src/openrouter/components/guardrail.py: id: 67ee78dd06e6 last_write_checksum: sha1:a06d7d1d1aa75b2e1c27cfa10cc5347a88821e76 @@ -10306,8 +10318,8 @@ trackedFiles: pristine_git_object: 5c3a48759ba31aa633627707b68885b6cc367ddf src/openrouter/errors/__init__.py: id: 366154d0d60a - last_write_checksum: sha1:341868aa0a77c47442fdc2c1beb62f24cc756477 - pristine_git_object: 10a1c8cff01dd919032918f50b3e3478c042e2b5 + last_write_checksum: sha1:c061de179ca2762428f9dabe408444585fa613bf + pristine_git_object: c3c56fb2b1a256865a21e4e1b6236b3952c0765b src/openrouter/errors/badgatewayresponse_error.py: id: 818c3605ce23 last_write_checksum: sha1:f0307bff4a47f950c514d7d47de5690cac871bbb @@ -10328,6 +10340,10 @@ trackedFiles: id: 4c1d3e6c95a4 last_write_checksum: sha1:1b60f416077b959b45023e087076e5bd16972ae1 pristine_git_object: 97c14f31678ca2a6ef09a71f397eb2dd1a7ea701 + src/openrouter/errors/goneresponse_error.py: + id: 13e8901c2c57 + last_write_checksum: sha1:0385d9500869cb406d064953c8e6fbdc75a671cf + pristine_git_object: 55b26ae67d2b1d2ae972cbead90ed99450d003ff src/openrouter/errors/internalserverresponse_error.py: id: a5ab5c4a53a9 last_write_checksum: sha1:3ffab8fcee20916d34ac6ff5112e8721f8d30c46 @@ -10986,8 +11002,8 @@ trackedFiles: pristine_git_object: dae01a44384ac3bc13ae07453a053bf6c898ebe3 src/openrouter/video_generation.py: id: d0a90c1b8efe - last_write_checksum: sha1:7ee130360a9ea861efc0a316ca018d63a5eb5d48 - pristine_git_object: 6fc1549e11844f2b6403eae82d07f801ef3e1ca8 + last_write_checksum: sha1:c26aaf3d00346762d83a451d67fd1a72cdb9e65d + pristine_git_object: b81833ba3a58658ca00d56e73520338b752515ea src/openrouter/workspaces.py: id: cd6c533b1802 last_write_checksum: sha1:68bf23158fc838c1ad63e871b5d2de6080a75931 @@ -11703,6 +11719,10 @@ examples: application/json: {"error": {"code": 502, "message": "Provider returned error"}} "403": application/json: {"error": {"code": 403, "message": "Only management keys can perform this operation"}} + "409": + application/json: {"error": {"code": 409, "message": "Resource conflict. Please try again later."}} + "410": + application/json: {"error": {"code": 410, "message": "The Coinbase APIs used by this endpoint have been deprecated, so the Coinbase Commerce credits API has been removed. Use the web credits purchase flow instead."}} listVideosModels: speakeasy-default-list-videos-models: responses: @@ -12898,4 +12918,6 @@ examples: "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} examplesVersion: 1.0.2 -releaseNotes: "## Python SDK Changes:\n* `open_router.byok.list()`: \n * `request.provider` **Changed**\n * `response.data[].provider` **Changed**\n* `open_router.byok.create()`: \n * `request.provider` **Changed**\n * `response.data.provider` **Changed**\n* `open_router.byok.get()`: `response.data.provider` **Changed**\n* `open_router.byok.update()`: `response.data.provider` **Changed**\n" +releaseNotes: | + ## Python SDK Changes: + * `open_router.video_generation.get_video_content()`: `error` **Changed** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 8263dc5b..154f7cb9 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.139 + version: 1.1.140 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 3bd982be..652ad71a 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -40811,6 +40811,26 @@ paths: schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' + '409': + content: + application/json: + example: + error: + code: 409 + message: 'Resource conflict. Please try again later.' + schema: + $ref: '#/components/schemas/ConflictResponse' + description: 'Conflict - Resource conflict or concurrent modification' + '410': + content: + application/json: + example: + error: + code: 410 + message: 'The Coinbase APIs used by this endpoint have been deprecated, so the Coinbase Commerce credits API has been removed. Use the web credits purchase flow instead.' + schema: + $ref: '#/components/schemas/GoneResponse' + description: 'Gone - Endpoint has been permanently removed or deprecated' '500': content: application/json: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 8683d7f2..d12555bd 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:1315918adfa49bdfc57840bee762b2a085d5c49787b69cc85c1b530ee1ced6c4 - sourceBlobDigest: sha256:5094ba655d827994d28d1f76232d328f59830b71f80d80e787d808d32876934d + sourceRevisionDigest: sha256:9f2ba01ee62d193557c8475d5ed2a07aa6a30f22bff5e76982e41d81cab295aa + sourceBlobDigest: sha256:384cfc63322d6c5551c0acb7aa89723c83a70d7fefe597490d75ac584ad82fb2 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:1315918adfa49bdfc57840bee762b2a085d5c49787b69cc85c1b530ee1ced6c4 - sourceBlobDigest: sha256:5094ba655d827994d28d1f76232d328f59830b71f80d80e787d808d32876934d + sourceRevisionDigest: sha256:9f2ba01ee62d193557c8475d5ed2a07aa6a30f22bff5e76982e41d81cab295aa + sourceBlobDigest: sha256:384cfc63322d6c5551c0acb7aa89723c83a70d7fefe597490d75ac584ad82fb2 codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:77bd303f49534d5f7a449085521ec07a57ed4d3c2ae2e40d256fc22769791e1e + codeSamplesRevisionDigest: sha256:75fa5f382eb10149ba874e1a0ec4dd21d0b371b54e03f4c258cf360ae5420abb workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index d929febf..8067af11 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -2179,4 +2179,14 @@ Based on: ### Generated - [python v1.1.139] . ### Releases -- [PyPI v1.1.139] https://pypi.org/project/openrouter/1.1.139 - . \ No newline at end of file +- [PyPI v1.1.139] https://pypi.org/project/openrouter/1.1.139 - . + +## 2026-09-14 08:17:57 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.140] . +### Releases +- [PyPI v1.1.140] https://pypi.org/project/openrouter/1.1.140 - . \ No newline at end of file diff --git a/docs/components/goneresponseerrordata.mdx b/docs/components/goneresponseerrordata.mdx new file mode 100644 index 00000000..79c5d5a9 --- /dev/null +++ b/docs/components/goneresponseerrordata.mdx @@ -0,0 +1,14 @@ +--- +title: "GoneResponseErrorData" +--- + +Error data for GoneResponse + + +## 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/goneresponseerror.mdx b/docs/errors/goneresponseerror.mdx new file mode 100644 index 00000000..3584e71b --- /dev/null +++ b/docs/errors/goneresponseerror.mdx @@ -0,0 +1,14 @@ +--- +title: "GoneResponseError" +--- + +Gone - Endpoint has been permanently removed or deprecated + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `error` | [components.GoneResponseErrorData](../components/goneresponseerrordata.mdx) | :heavy_check_mark: | Error data for GoneResponse | \{
"code": 410,
"message": "The Coinbase APIs used by this endpoint have been deprecated, so the Coinbase Commerce credits API has been removed. Use the web credits purchase flow instead."
} | +| `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/videogeneration/README.mdx b/docs/sdks/videogeneration/README.mdx index c77d333e..b73d8195 100644 --- a/docs/sdks/videogeneration/README.mdx +++ b/docs/sdks/videogeneration/README.mdx @@ -177,6 +177,8 @@ with OpenRouter( | errors.UnauthorizedResponseError | 401 | application/json | | errors.ForbiddenResponseError | 403 | application/json | | errors.NotFoundResponseError | 404 | application/json | +| errors.ConflictResponseError | 409 | application/json | +| errors.GoneResponseError | 410 | application/json | | errors.InternalServerResponseError | 500 | application/json | | errors.BadGatewayResponseError | 502 | application/json | | errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* | diff --git a/pyproject.toml b/pyproject.toml index b7cdb078..26c7e669 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.139" +version = "1.1.140" 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 e03223d3..922892c1 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.139" +__version__: str = "1.1.140" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.139 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.140 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 96c18dbf..9c8f3446 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -1295,6 +1295,10 @@ GetWorkspaceResponse, GetWorkspaceResponseTypedDict, ) + from .goneresponseerrordata import ( + GoneResponseErrorData, + GoneResponseErrorDataTypedDict, + ) from .guardrail import Guardrail, GuardrailTypedDict from .guardraildataregion import GuardrailDataRegion from .guardrailinterval import GuardrailInterval @@ -4179,6 +4183,8 @@ "GetWorkspaceBudgetResponseTypedDict", "GetWorkspaceResponse", "GetWorkspaceResponseTypedDict", + "GoneResponseErrorData", + "GoneResponseErrorDataTypedDict", "GrantType", "Guardrail", "GuardrailDataRegion", @@ -6557,6 +6563,8 @@ "GetWorkspaceBudgetResponseTypedDict": ".getworkspacebudgetresponse", "GetWorkspaceResponse": ".getworkspaceresponse", "GetWorkspaceResponseTypedDict": ".getworkspaceresponse", + "GoneResponseErrorData": ".goneresponseerrordata", + "GoneResponseErrorDataTypedDict": ".goneresponseerrordata", "Guardrail": ".guardrail", "GuardrailTypedDict": ".guardrail", "GuardrailDataRegion": ".guardraildataregion", diff --git a/src/openrouter/components/goneresponseerrordata.py b/src/openrouter/components/goneresponseerrordata.py new file mode 100644 index 00000000..1268e32c --- /dev/null +++ b/src/openrouter/components/goneresponseerrordata.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 GoneResponseErrorDataTypedDict(TypedDict): + r"""Error data for GoneResponse""" + + code: int + message: str + metadata: NotRequired[Nullable[Dict[str, Any]]] + + +class GoneResponseErrorData(BaseModel): + r"""Error data for GoneResponse""" + + 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 10a1c8cf..c3c56fb2 100644 --- a/src/openrouter/errors/__init__.py +++ b/src/openrouter/errors/__init__.py @@ -23,6 +23,7 @@ ForbiddenResponseError, ForbiddenResponseErrorData, ) + from .goneresponse_error import GoneResponseError, GoneResponseErrorData from .internalserverresponse_error import ( InternalServerResponseError, InternalServerResponseErrorData, @@ -76,6 +77,8 @@ "EdgeNetworkTimeoutResponseErrorData", "ForbiddenResponseError", "ForbiddenResponseErrorData", + "GoneResponseError", + "GoneResponseErrorData", "InternalServerResponseError", "InternalServerResponseErrorData", "NoResponseError", @@ -115,6 +118,8 @@ "EdgeNetworkTimeoutResponseErrorData": ".edgenetworktimeoutresponse_error", "ForbiddenResponseError": ".forbiddenresponse_error", "ForbiddenResponseErrorData": ".forbiddenresponse_error", + "GoneResponseError": ".goneresponse_error", + "GoneResponseErrorData": ".goneresponse_error", "InternalServerResponseError": ".internalserverresponse_error", "InternalServerResponseErrorData": ".internalserverresponse_error", "NoResponseError": ".no_response_error", diff --git a/src/openrouter/errors/goneresponse_error.py b/src/openrouter/errors/goneresponse_error.py new file mode 100644 index 00000000..55b26ae6 --- /dev/null +++ b/src/openrouter/errors/goneresponse_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 ( + goneresponseerrordata as components_goneresponseerrordata, +) +from openrouter.errors import OpenRouterError +from openrouter.types import BaseModel, OptionalNullable, UNSET +from typing import Any, Dict, Optional + + +class GoneResponseErrorData(BaseModel): + error: components_goneresponseerrordata.GoneResponseErrorData + r"""Error data for GoneResponse""" + openrouter_metadata: OptionalNullable[Dict[str, Any]] = UNSET + user_id: OptionalNullable[str] = UNSET + + +@dataclass(unsafe_hash=True) +class GoneResponseError(OpenRouterError): + r"""Gone - Endpoint has been permanently removed or deprecated""" + + data: GoneResponseErrorData = field(hash=False) + + def __init__( + self, + data: GoneResponseErrorData, + 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/video_generation.py b/src/openrouter/video_generation.py index 6fc1549e..b81833ba 100644 --- a/src/openrouter/video_generation.py +++ b/src/openrouter/video_generation.py @@ -853,6 +853,18 @@ def get_video_content( errors.NotFoundResponseErrorData, http_res, http_res_text ) raise errors.NotFoundResponseError(response_data, http_res, http_res_text) + if utils.match_response(http_res, "409", "application/json"): + http_res_text = utils.stream_to_text(http_res) + response_data = unmarshal_json_response( + errors.ConflictResponseErrorData, http_res, http_res_text + ) + raise errors.ConflictResponseError(response_data, http_res, http_res_text) + if utils.match_response(http_res, "410", "application/json"): + http_res_text = utils.stream_to_text(http_res) + response_data = unmarshal_json_response( + errors.GoneResponseErrorData, http_res, http_res_text + ) + raise errors.GoneResponseError(response_data, http_res, http_res_text) if utils.match_response(http_res, "500", "application/json"): http_res_text = utils.stream_to_text(http_res) response_data = unmarshal_json_response( @@ -1013,6 +1025,18 @@ async def get_video_content_async( errors.NotFoundResponseErrorData, http_res, http_res_text ) raise errors.NotFoundResponseError(response_data, http_res, http_res_text) + if utils.match_response(http_res, "409", "application/json"): + http_res_text = await utils.stream_to_text_async(http_res) + response_data = unmarshal_json_response( + errors.ConflictResponseErrorData, http_res, http_res_text + ) + raise errors.ConflictResponseError(response_data, http_res, http_res_text) + if utils.match_response(http_res, "410", "application/json"): + http_res_text = await utils.stream_to_text_async(http_res) + response_data = unmarshal_json_response( + errors.GoneResponseErrorData, http_res, http_res_text + ) + raise errors.GoneResponseError(response_data, http_res, http_res_text) if utils.match_response(http_res, "500", "application/json"): http_res_text = await utils.stream_to_text_async(http_res) response_data = unmarshal_json_response( diff --git a/uv.lock b/uv.lock index d4fa431e..d499861f 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.139" +version = "1.1.140" source = { editable = "." } dependencies = [ { name = "httpcore" }, From a0660658cbabb4d5907c7ff96af292881257f61a Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 08:19:25 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow