From 5cdfcbe45f8d710b4942d56e196aa2c027662f81 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 18 Sep 2026 20:11:46 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `open_router.endpoints.list_zdr_endpoints()`: `response.data[].perf_last_30m_by_workload.decisions` **Added** * `open_router.endpoints.list()`: `response.data.endpoints[].perf_last_30m_by_workload.decisions` **Added** --- .speakeasy/gen.lock | 40 ++++++++++++--------- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 20 +++++++++++ .speakeasy/workflow.lock | 10 +++--- RELEASES.md | 12 ++++++- docs/components/decisions.mdx | 11 ++++++ docs/components/perflast30mbyworkload.mdx | 1 + pyproject.toml | 2 +- src/openrouter/_version.py | 4 +-- src/openrouter/components/__init__.py | 6 ++++ src/openrouter/components/publicendpoint.py | 34 ++++++++++++++++++ uv.lock | 2 +- 12 files changed, 117 insertions(+), 27 deletions(-) create mode 100644 docs/components/decisions.mdx diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index e3e0f3ca..06e68a91 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: 6b4a8542e991f840a99e609a9c92b16a + docChecksum: 03debdc8d24d4dddc93cea8075931d77 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.158 - configChecksum: 149aa2689e4957309bb4c1b977ccd927 + releaseVersion: 1.1.159 + configChecksum: fd98805ff1b03acfa034ef646f6b33b6 repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 09e2bccd-885d-413a-a5cb-fc35ac545c1a - pristine_commit_hash: 277d07755a439c31266aec30277ca519ba6e39dc - pristine_tree_hash: 80913373c42f4ea1636b8ec24826ba9608671274 + generation_id: 16700c4e-c46e-4247-b019-436fcf69246f + pristine_commit_hash: 330eef4f60b8f72d1510a40d7092208a9a240a90 + pristine_tree_hash: f734119a88cf2398cccd3f7bd147f08a030f9b34 features: python: acceptHeaders: 3.0.0 @@ -1808,6 +1808,10 @@ trackedFiles: id: 8b6b222a5da7 last_write_checksum: sha1:e37576941ec9e2cb4fe176277bb02b9cc86f6f48 pristine_git_object: 5d2d4dc2ddfc8d88c4869242498affc0b46f969e + docs/components/decisions.mdx: + id: 2cbde2112b18 + last_write_checksum: sha1:90f7268b80fdabbdf4f5c78aac765d6442539348 + pristine_git_object: d68a93a6e4f6d372e9be4554174339d4dbd86f67 docs/components/decisionschoiceanswer.mdx: id: 8453afbdc1aa last_write_checksum: sha1:6c917d892506ab1257cf46468e58a0fb6f130f8b @@ -4686,8 +4690,8 @@ trackedFiles: pristine_git_object: 86ea312944a50501fd307f41c471b2462adeeb5e docs/components/perflast30mbyworkload.mdx: id: bdcf1999b086 - last_write_checksum: sha1:1390768d24471859dc830f0dbd892085aceab9c5 - pristine_git_object: a75ac7be6f20c9b564a2fc7bc23d8efc4057bac1 + last_write_checksum: sha1:0d6efbd8fc766892de7dcf9565d7457448b4e6fd + pristine_git_object: 193447130fc6f38685f2b762681c8ea46c347e43 docs/components/perrequestlimits.mdx: id: a503880c4645 last_write_checksum: sha1:a971ac638f0c8885577b1165909c8d5ef6b77e1f @@ -8154,8 +8158,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:58ed3a2d2fa0db47040241f3a4d1c9a24e1a2fcf - pristine_git_object: 942f29aeae46ffbae048748c32bb4f9413d35662 + last_write_checksum: sha1:270325a9d1b6cc9957b80685361a74e4c1eda8d3 + pristine_git_object: 7bac6b6178904740ab981df0378ec88883996ac0 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -8182,8 +8186,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:cfd0e41c1049fd8a411f75f715891767592d58cc - pristine_git_object: 13c50d4098317244793f918499ecba0ba133fb85 + last_write_checksum: sha1:fc59ea125c8202c0d65f68a459e310521e2899e4 + pristine_git_object: ca93db7bc4c211da0f565f1627787c63a81cbf03 src/openrouter/alpha.py: id: 306c4d93308d last_write_checksum: sha1:0c25a52ed5fb688ec1e923e4e82bcfc9cae49465 @@ -8226,8 +8230,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:d21e29eb27b9db4d1f75ea2d4c2a98ad18099e11 - pristine_git_object: 48647085cc6fe2b73d22ba0cf28de9aa8c35699d + last_write_checksum: sha1:4688e864f8d90268569ae28857855ab932974184 + pristine_git_object: 87f19fea2c07bf561e2f0c547ce439e545979c07 src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -10294,8 +10298,8 @@ trackedFiles: pristine_git_object: 5f4a4186a9c98767217546b6b87d238fbc0155f3 src/openrouter/components/publicendpoint.py: id: 848aa2ef9129 - last_write_checksum: sha1:859e0d6fb0db27400d0ce70949dfb1b08ac47bed - pristine_git_object: 2b6ad0a0dbfebf6be9e7c4eaff03b99da5e2f890 + last_write_checksum: sha1:42707d2210be0e29267c85b4454676dfd56164b9 + pristine_git_object: 7830ec36d3bd2bcd575007c61910165ebe0f2952 src/openrouter/components/publicpricing.py: id: 96d115d83cc5 last_write_checksum: sha1:fd8c320ac83b282eaf2405045329b55076d4311a @@ -14936,3 +14940,7 @@ examples: "502": application/json: {"error": {"code": 409, "message": "That question is no longer waiting for an answer."}} examplesVersion: 1.0.2 +releaseNotes: | + ## Python SDK Changes: + * `open_router.endpoints.list_zdr_endpoints()`: `response.data[].perf_last_30m_by_workload.decisions` **Added** + * `open_router.endpoints.list()`: `response.data.endpoints[].perf_last_30m_by_workload.decisions` **Added** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index e0cdfc5a..65667386 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.158 + version: 1.1.159 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 31d348a1..353662d3 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -23693,6 +23693,26 @@ components: additionalProperties: false description: 'Endpoint performance over the last 30 minutes, keyed by the kind of request served (e.g. `text_generation`, `image_generation`). Additive to the legacy singular latency and throughput fields; image and video generation report end-to-end latency. Only visible when authenticated with an API key or cookie.' properties: + decisions: + properties: + latency: + allOf: + - $ref: '#/components/schemas/PercentileStats' + - description: 'Latency percentiles in milliseconds for this workload. Image and video generation report full end-to-end generation time, because their raw latency only measures request acknowledgement; every other workload reports time to first token or result.' + request_count: + description: 'Total requests admitted for this workload in the window.' + type: + - 'integer' + - 'null' + throughput: + allOf: + - $ref: '#/components/schemas/PercentileStats' + - description: 'Throughput percentiles in tokens per second. Only meaningful for text generation; null for workloads without token throughput.' + required: + - 'latency' + - 'throughput' + - 'request_count' + type: 'object' embeddings: properties: latency: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 0e45a5ba..d5fca466 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:218cfb491888dd01bb0b91626a578a8dcf476ca9bcbb60ae34999e54c236c72a - sourceBlobDigest: sha256:09cb6f35097e73250969974686759a2896ee29de88182fc04bcd06a279a3df75 + sourceRevisionDigest: sha256:ffba8dbb7f72bdaa2a0e39560adc9786831528f410788b71ca1393a296fb7b3b + sourceBlobDigest: sha256:7c9f591b9cf36f87b8ad27e579cb431262eb2327719f6b725a723ecc890b8958 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:218cfb491888dd01bb0b91626a578a8dcf476ca9bcbb60ae34999e54c236c72a - sourceBlobDigest: sha256:09cb6f35097e73250969974686759a2896ee29de88182fc04bcd06a279a3df75 + sourceRevisionDigest: sha256:ffba8dbb7f72bdaa2a0e39560adc9786831528f410788b71ca1393a296fb7b3b + sourceBlobDigest: sha256:7c9f591b9cf36f87b8ad27e579cb431262eb2327719f6b725a723ecc890b8958 codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:bc39f80dec774fbaf8d57e1515c9ac07feff2a94dc4ba105cd376f819adf36bf + codeSamplesRevisionDigest: sha256:453d0302f23792a529f3eb3d82fe14ed78fd4fea0f9bf733a16ec56616358024 workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index edfeb5be..5455c5d8 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -2369,4 +2369,14 @@ Based on: ### Generated - [python v1.1.158] . ### Releases -- [PyPI v1.1.158] https://pypi.org/project/openrouter/1.1.158 - . \ No newline at end of file +- [PyPI v1.1.158] https://pypi.org/project/openrouter/1.1.158 - . + +## 2026-09-18 20:09:17 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.159] . +### Releases +- [PyPI v1.1.159] https://pypi.org/project/openrouter/1.1.159 - . \ No newline at end of file diff --git a/docs/components/decisions.mdx b/docs/components/decisions.mdx new file mode 100644 index 00000000..d68a93a6 --- /dev/null +++ b/docs/components/decisions.mdx @@ -0,0 +1,11 @@ +--- +title: "Decisions" +--- + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `latency` | [Nullable[components.PercentileStats]](../components/percentilestats.mdx) | :heavy_check_mark: | N/A | \{
"p50": 25.5,
"p75": 35.2,
"p90": 48.7,
"p99": 85.3
} | +| `request_count` | *Nullable[int]* | :heavy_check_mark: | Total requests admitted for this workload in the window. | | +| `throughput` | [Nullable[components.PercentileStats]](../components/percentilestats.mdx) | :heavy_check_mark: | N/A | \{
"p50": 25.5,
"p75": 35.2,
"p90": 48.7,
"p99": 85.3
} | \ No newline at end of file diff --git a/docs/components/perflast30mbyworkload.mdx b/docs/components/perflast30mbyworkload.mdx index a75ac7be..19344713 100644 --- a/docs/components/perflast30mbyworkload.mdx +++ b/docs/components/perflast30mbyworkload.mdx @@ -9,6 +9,7 @@ Endpoint performance over the last 30 minutes, keyed by the kind of request serv | Field | Type | Required | Description | | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `decisions` | [Optional[components.Decisions]](../components/decisions.mdx) | :heavy_minus_sign: | N/A | | `embeddings` | [Optional[components.Embeddings]](../components/embeddings.mdx) | :heavy_minus_sign: | N/A | | `image_generation` | [Optional[components.ImageGeneration]](../components/imagegeneration.mdx) | :heavy_minus_sign: | N/A | | `rerank` | [Optional[components.Rerank]](../components/rerank.mdx) | :heavy_minus_sign: | N/A | diff --git a/pyproject.toml b/pyproject.toml index 942f29ae..7bac6b61 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.158" +version = "1.1.159" 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 13c50d40..ca93db7b 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.158" +__version__: str = "1.1.159" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.158 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.159 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 48647085..87f19fea 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -2780,6 +2780,8 @@ ProvisionInternResponseTypedDict, ) from .publicendpoint import ( + Decisions, + DecisionsTypedDict, Embeddings, EmbeddingsTypedDict, ImageGeneration, @@ -4180,6 +4182,7 @@ "DebugEventType", "DebugEventTypedDict", "DebugTypedDict", + "Decisions", "DecisionsChoiceAnswer", "DecisionsChoiceAnswerType", "DecisionsChoiceAnswerTypedDict", @@ -4212,6 +4215,7 @@ "DecisionsScoreQuestionInstructionsTypedDict", "DecisionsScoreQuestionType", "DecisionsScoreQuestionTypedDict", + "DecisionsTypedDict", "DefaultEffort", "DefaultParameters", "DefaultParametersTypedDict", @@ -8058,6 +8062,8 @@ "ProviderSortConfigTypedDict": ".providersortconfig", "ProvisionInternResponse": ".provisioninternresponse", "ProvisionInternResponseTypedDict": ".provisioninternresponse", + "Decisions": ".publicendpoint", + "DecisionsTypedDict": ".publicendpoint", "Embeddings": ".publicendpoint", "EmbeddingsTypedDict": ".publicendpoint", "ImageGeneration": ".publicendpoint", diff --git a/src/openrouter/components/publicendpoint.py b/src/openrouter/components/publicendpoint.py index 2b6ad0a0..7830ec36 100644 --- a/src/openrouter/components/publicendpoint.py +++ b/src/openrouter/components/publicendpoint.py @@ -14,6 +14,36 @@ from typing_extensions import NotRequired, TypedDict +class DecisionsTypedDict(TypedDict): + latency: Nullable[PercentileStatsTypedDict] + request_count: Nullable[int] + r"""Total requests admitted for this workload in the window.""" + throughput: Nullable[PercentileStatsTypedDict] + + +class Decisions(BaseModel): + latency: Nullable[PercentileStats] + + request_count: Nullable[int] + r"""Total requests admitted for this workload in the window.""" + + throughput: Nullable[PercentileStats] + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + 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)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + class EmbeddingsTypedDict(TypedDict): latency: Nullable[PercentileStatsTypedDict] request_count: Nullable[int] @@ -257,6 +287,7 @@ def serialize_model(self, handler): class PerfLast30mByWorkloadTypedDict(TypedDict): r"""Endpoint performance over the last 30 minutes, keyed by the kind of request served (e.g. `text_generation`, `image_generation`). Additive to the legacy singular latency and throughput fields; image and video generation report end-to-end latency. Only visible when authenticated with an API key or cookie.""" + decisions: NotRequired[DecisionsTypedDict] embeddings: NotRequired[EmbeddingsTypedDict] image_generation: NotRequired[ImageGenerationTypedDict] rerank: NotRequired[RerankTypedDict] @@ -270,6 +301,8 @@ class PerfLast30mByWorkloadTypedDict(TypedDict): class PerfLast30mByWorkload(BaseModel): r"""Endpoint performance over the last 30 minutes, keyed by the kind of request served (e.g. `text_generation`, `image_generation`). Additive to the legacy singular latency and throughput fields; image and video generation report end-to-end latency. Only visible when authenticated with an API key or cookie.""" + decisions: Optional[Decisions] = None + embeddings: Optional[Embeddings] = None image_generation: Optional[ImageGeneration] = None @@ -290,6 +323,7 @@ class PerfLast30mByWorkload(BaseModel): def serialize_model(self, handler): optional_fields = set( [ + "decisions", "embeddings", "image_generation", "rerank", diff --git a/uv.lock b/uv.lock index 9415b77b..b17b700e 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.158" +version = "1.1.159" source = { editable = "." } dependencies = [ { name = "httpcore" }, From 781a8c806fc2b548a5b8b0aaaf51819a6773c374 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Fri, 18 Sep 2026 20:11:54 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow