From bb94fcee4d013f66c4899a48ba9915baba1883ac Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Tue, 15 Sep 2026 20:27:46 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `open_router.tts.create_speech()`: `request.user` **Added** * `open_router.stt.create_transcription()`: `request.user` **Added** * `open_router.rerank.rerank()`: `request.user` **Added** * `open_router.video_generation.generate()`: `request.user` **Added** --- .speakeasy/gen.lock | 90 ++++++++++--------- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 21 +++++ .speakeasy/workflow.lock | 10 +-- RELEASES.md | 12 ++- docs/components/speechrequest.mdx | 1 + docs/components/sttrequest.mdx | 3 +- docs/components/videogenerationrequest.mdx | 3 +- docs/operations/creatererankrequestbody.mdx | 15 ++-- docs/sdks/rerank/README.mdx | 1 + docs/sdks/stt/README.mdx | 1 + docs/sdks/tts/README.mdx | 1 + docs/sdks/videogeneration/README.mdx | 1 + pyproject.toml | 2 +- src/openrouter/_version.py | 4 +- src/openrouter/components/speechrequest.py | 14 ++- src/openrouter/components/sttrequest.py | 6 ++ .../components/videogenerationrequest.py | 6 ++ src/openrouter/operations/creatererank.py | 7 +- src/openrouter/rerank.py | 6 ++ src/openrouter/stt.py | 6 ++ src/openrouter/tts.py | 6 ++ src/openrouter/video_generation.py | 6 ++ uv.lock | 2 +- 24 files changed, 160 insertions(+), 66 deletions(-) diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 8fd7a73c..31a5404c 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: 64c7fdab9cd5094257d03795e1c32093 + docChecksum: 9d69845ad31ce7ba8ce7e7f486b06619 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.144 - configChecksum: 5003e7c8d10125dcfac77dd91f99f61d + releaseVersion: 1.1.145 + configChecksum: 1cb632567e10bac5f17433f4cf62533b repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: c32a6f51-0d86-4287-a290-9f50713de8a5 - pristine_commit_hash: fe705ca96236ca6dc68684dfa15596cbfe45c72f - pristine_tree_hash: 65aab2e1250767a7446a834d74530f028f849204 + generation_id: f89f4f8a-510b-47f7-bd2c-06f60c0d43fb + pristine_commit_hash: 87993f0dcce80694529a2c6ec7bce1192292d14a + pristine_tree_hash: d898af55f7ae457d5458c596381f4f8223c45c7a features: python: acceptHeaders: 3.0.0 @@ -5098,8 +5098,8 @@ trackedFiles: pristine_git_object: 34f4f07fb3008df83646fa3d88ce04009274246a docs/components/speechrequest.mdx: id: 06e81b0433f6 - last_write_checksum: sha1:cfa0f8751fde659d1888fcde1a8e788ab7129343 - pristine_git_object: a04cdc81dc23cd445fb17af67ab16dce9eee06a6 + last_write_checksum: sha1:0ff4255b41bf4c3fdecfa3d92ef07d722c01b876 + pristine_git_object: a74e87f8fc263a9e4ac09cfe2394e3aec6de85b7 docs/components/speechrequestprovider.mdx: id: 4f78ed0394c4 last_write_checksum: sha1:99d94c6b01dbd3e875c213584f97c7dca545a6a9 @@ -5230,8 +5230,8 @@ trackedFiles: pristine_git_object: 70a2660b7c0bc35aed96124e1faa3852b3117054 docs/components/sttrequest.mdx: id: 6a5e33cf6dbe - last_write_checksum: sha1:63f215311d23a63a59b65d2bc8d642005379730e - pristine_git_object: e81d9df15323bda23bdc67ac0703ca24e5a84175 + last_write_checksum: sha1:10dcd183a9b518a4b50705347229ffd778bc2cd7 + pristine_git_object: 39dadb91251c355a10f6760bbf25030e129983d9 docs/components/sttrequestprovider.mdx: id: d8b1bac8e745 last_write_checksum: sha1:e15551eddbe4c1f7c4515fa556d4873075512eea @@ -5870,8 +5870,8 @@ trackedFiles: pristine_git_object: 0f7cc13e29aa234d72930b1a95cf56cdaf836d4d docs/components/videogenerationrequest.mdx: id: b92ddbd15ee4 - last_write_checksum: sha1:691ba3554e13181bbb7e5e591d2095df3d2c4eb5 - pristine_git_object: e53114a381d29202f4b6dd99a9a3298e8a1dbfa0 + last_write_checksum: sha1:0c9d393833efada795c67123104bed25da2bef9f + pristine_git_object: 190ba46e25d112d35c8bace4f8a2e8666ce9e244 docs/components/videogenerationrequestaspectratio.mdx: id: c14859c0d8c3 last_write_checksum: sha1:4ad4aae702af1cd2ddee7b443c35c9b3df6824e8 @@ -6410,8 +6410,8 @@ trackedFiles: pristine_git_object: f0d351fc5e1348b126ff9bdb7ca184405ede80dd docs/operations/creatererankrequestbody.mdx: id: 70e89df7dc65 - last_write_checksum: sha1:08cec5610e04408ed6ba5d9a2a02dc25121dac9b - pristine_git_object: b5640657b90287594f02c7c547637a208c5d63eb + last_write_checksum: sha1:71971408ea8bdd6f6f76ac4897ea6b75c92c34ac + pristine_git_object: e270760ce835b9e9cde174ba9c98284157336f15 docs/operations/creatererankresponse.mdx: id: 1cc3705ce113 last_write_checksum: sha1:9eabc300f420fc0b4177bc4527ff849a7f05366c @@ -7634,8 +7634,8 @@ trackedFiles: pristine_git_object: 7571e2581a73919541d9712f6c1f88f9c0d2b4c9 docs/sdks/rerank/README.mdx: id: 68cdfc7f7dca - last_write_checksum: sha1:d4dd356c41f015df66cded3ecece8854547dd867 - pristine_git_object: ad1d6f898b92bb69a980849fe21701dab375322d + last_write_checksum: sha1:c3c818d69858a83f9caa160e1ca9f8d641f89184 + pristine_git_object: cfabc30e3227960225c634e5dba3f7d5ade78040 docs/sdks/responses/README.mdx: id: abab319e080e last_write_checksum: sha1:786e6be086f66f9262e19d6bbf8e32d726bea076 @@ -7646,16 +7646,16 @@ trackedFiles: pristine_git_object: c7435646cf280b7b2fbb2805b2cde15b4c570896 docs/sdks/stt/README.mdx: id: 190b0dc9a5d1 - last_write_checksum: sha1:a9885710fd21bb71b4c80a10ad54a20bf47ddca7 - pristine_git_object: e3d0710101800912f24eefe9f6ff09b134f35309 + last_write_checksum: sha1:e69bbf0b1a8a6febc530c09718aa5e5aa9cc8d8b + pristine_git_object: 17d24017d2ba3b285ad5b245a663ba121e74738d docs/sdks/tts/README.mdx: id: cd1132543884 - last_write_checksum: sha1:42500815f5e697f034fc8a033b07e334e4439bed - pristine_git_object: 80af14ecc66831a2a2d09382a917731406813ccd + last_write_checksum: sha1:83753721909b55afe9d7f1a629c3e97960b23c1b + pristine_git_object: ec16529cb177badbd1db41f12ecc085975326d0b docs/sdks/videogeneration/README.mdx: id: 9a8fa04c3872 - last_write_checksum: sha1:44941eaef3c9aa671e2f74e20c08adf6fd8fcfa4 - pristine_git_object: b73d8195dba16b9d6edfd2477dcfeaadc2512bfa + last_write_checksum: sha1:bdfa39262904b46b08b42cb58ea7d4a102cb7d42 + pristine_git_object: 9ba8081e723fdb44316102e1d211b773c670ebe8 docs/sdks/workspaces/README.mdx: id: 0c75d023ef6b last_write_checksum: sha1:25592df93519c9e742e7c2a3df49ea2337a47d64 @@ -7666,8 +7666,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:9a1514fe82c68fc00bebd81cbe2cf268a2de618a - pristine_git_object: bbf6a5610eca8513157195c5bb5f33dad5910098 + last_write_checksum: sha1:b084b83f74ceeed171799f7b0219ae6ffb51002d + pristine_git_object: 64c95ecfffcef89f5863cb9066da4623173b9344 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7694,8 +7694,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:fd87a6f9d7a5fa6125885e31a718aae32d00d825 - pristine_git_object: b4f8e9ce1fcf8b233ff0ddf1a527e23384b7026f + last_write_checksum: sha1:64fc5bf9ed18744450d88b6cdd31896419cad678 + pristine_git_object: 23a5fe0193fd5bec67ffcbd07784530553a65f57 src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:1e0004d8d1d5d797e2b54cd1cabeb7f9489d08e9 @@ -9902,8 +9902,8 @@ trackedFiles: pristine_git_object: e1703efe8ac18c7aea925375ddfa6ef74c31193b src/openrouter/components/speechrequest.py: id: 2a9400167112 - last_write_checksum: sha1:2300e52fefdde12b30abaa90b0fd4ee6eff30f80 - pristine_git_object: a94e0835c997014ced20ca0fbea416faf8bc7b15 + last_write_checksum: sha1:230ad91f68d2c5d5f8771f903d14b5cbae5e5bf2 + pristine_git_object: 7d85d8d07a5502df3b4d084e200b21a321e55110 src/openrouter/components/stopservertoolswhencondition.py: id: 2deeda4209ac last_write_checksum: sha1:581e0ee62776d42bf598b9f68b998faabfecd3ce @@ -9970,8 +9970,8 @@ trackedFiles: pristine_git_object: 76c4b466e22e57b34098b587e95cb358089dd87c src/openrouter/components/sttrequest.py: id: 5fb1d469e16e - last_write_checksum: sha1:2944becda4acc11da95aff5cfb967544b8b15d0a - pristine_git_object: ce7ba259743cba658a3e23c2ea212d0fcaf34ebf + last_write_checksum: sha1:35d70305d4cc96d9a108041f7b4ed811de90e11b + pristine_git_object: 175d4308fba8cfc2fb8d563ffb9a529a22209ba2 src/openrouter/components/sttresponse.py: id: 2dc8eb8daaca last_write_checksum: sha1:36aff8c075a27f036d34f3970031a26aad99f804 @@ -10182,8 +10182,8 @@ trackedFiles: pristine_git_object: a0491cc8fd3bd9986146cb1176e27d5b9c9beb60 src/openrouter/components/videogenerationrequest.py: id: 70e3c9ff288c - last_write_checksum: sha1:c8c27b3f75a1522825eafdddacfa14be6457b9a7 - pristine_git_object: 251f8543f2f0087fd37a93a86383e3e108329f35 + last_write_checksum: sha1:d6823eaf89e513db9a17c6da84b151ff125dbf01 + pristine_git_object: 98b5556f27c4e01ee12893e09c6ffc67bca032ad src/openrouter/components/videogenerationresponse.py: id: 541f1321b072 last_write_checksum: sha1:18c3aa7845f63a9614286b1a27b6098eae1c4951 @@ -10534,8 +10534,8 @@ trackedFiles: pristine_git_object: becc8c5f5af5402ce510eda9784ba2ff675d6a94 src/openrouter/operations/creatererank.py: id: 99b5d368a168 - last_write_checksum: sha1:a4d3ecf4ffa75b4d66563cefa86d1582624ae128 - pristine_git_object: 3786a979e8f38a527b3cdfbd08798f67948a9480 + last_write_checksum: sha1:88f560edad27e74df61d8f15b9ea399a2b03f0e6 + pristine_git_object: 5bc35def1808cd44b03229af253fe0a2dfe4de76 src/openrouter/operations/createresponses.py: id: afb834172b62 last_write_checksum: sha1:3cfb72d6b7dc9c55dc3955b53b0a7326a11f4688 @@ -10886,8 +10886,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 src/openrouter/rerank.py: id: 8dbc1be8d76f - last_write_checksum: sha1:370bfaddfa96a3f511497dcd2cdff58e00c0b1fb - pristine_git_object: 327778a827e0a2b1d787bba3ac8edfd1534b71df + last_write_checksum: sha1:7602b3952192d00547de27bb8a95c5cac7233ba4 + pristine_git_object: dcf9614bea7a6c98365a4e4f64abb633fb9a4a86 src/openrouter/responses.py: id: f2108fb635e1 last_write_checksum: sha1:27af78b7cedb1691bb88a71271808d1e4685c2bb @@ -10906,12 +10906,12 @@ trackedFiles: pristine_git_object: 26433165a0b1c25d7bd3115b9b129b18f2dc9387 src/openrouter/stt.py: id: fc0c2f669423 - last_write_checksum: sha1:f5269c3d75c6dbe05d64b848efcdced97e7f16a7 - pristine_git_object: d0fcdf070fb6b37f136672a5e82f4c79f14f7a13 + last_write_checksum: sha1:af66c655d8cbe6bf2d901a7402e57b78c1f15175 + pristine_git_object: 16a9e4f4d804ac992313929f477689b142386e99 src/openrouter/tts.py: id: 5055d4b95f1d - last_write_checksum: sha1:6c45479abd73b0c089c7bc2bc349c568fe1a1817 - pristine_git_object: 4b92059be9b90d86ef2e1516d98602c0b0c0aa16 + last_write_checksum: sha1:ed6336f669add8b0bd6d3e5106b80e91b16c3115 + pristine_git_object: 621ca762f03c0ecb3ef1ed735a76a575766c1f22 src/openrouter/types/__init__.py: id: 5eab536205b7 last_write_checksum: sha1:f9ad14217f832e74f594285960125add50324be9 @@ -11002,8 +11002,8 @@ trackedFiles: pristine_git_object: dae01a44384ac3bc13ae07453a053bf6c898ebe3 src/openrouter/video_generation.py: id: d0a90c1b8efe - last_write_checksum: sha1:c26aaf3d00346762d83a451d67fd1a72cdb9e65d - pristine_git_object: b81833ba3a58658ca00d56e73520338b752515ea + last_write_checksum: sha1:6d151291b66af2d811a6c16a197eae61e70205fe + pristine_git_object: fd34623795adec9ce8440bb8c79c72dc0d3a03b4 src/openrouter/workspaces.py: id: cd6c533b1802 last_write_checksum: sha1:68bf23158fc838c1ad63e871b5d2de6080a75931 @@ -12924,5 +12924,7 @@ examples: examplesVersion: 1.0.2 releaseNotes: | ## Python SDK Changes: - * `open_router.guardrails.update()`: `error.status[403]` **Added** - * `open_router.guardrails.bulk_assign_keys()`: `error.status[403]` **Added** + * `open_router.tts.create_speech()`: `request.user` **Added** + * `open_router.stt.create_transcription()`: `request.user` **Added** + * `open_router.rerank.rerank()`: `request.user` **Added** + * `open_router.video_generation.generate()`: `request.user` **Added** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 10285923..c02b64a8 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.144 + version: 1.1.145 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 70cc00f4..5be3096c 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -10970,6 +10970,7 @@ components: user: description: 'A stable identifier for your end-users. Used to help detect and prevent abuse. Never sent to providers verbatim: for providers whose data policy requires user IDs, it is folded into a hashed, per-account upstream user identifier.' example: 'end-user-abc123' + maxLength: 256 type: 'string' required: - 'model' @@ -24607,6 +24608,11 @@ components: example: 1 format: 'double' type: 'number' + user: + description: 'A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.' + example: 'user-1234' + maxLength: 256 + type: 'string' voice: description: 'Voice identifier (provider-specific).' example: 'en_paul_neutral' @@ -25108,6 +25114,11 @@ components: items: $ref: '#/components/schemas/STTTimestampGranularity' type: 'array' + user: + description: 'A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.' + example: 'user-1234' + maxLength: 256 + type: 'string' required: - 'model' - 'input_audio' @@ -27259,6 +27270,11 @@ components: exclusiveMinimum: true minimum: 0 type: 'number' + user: + description: 'A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.' + example: 'user-1234' + maxLength: 256 + type: 'string' required: - 'model' type: 'object' @@ -39526,6 +39542,11 @@ paths: example: 3 minimum: 1 type: 'integer' + user: + description: 'A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.' + example: 'user-1234' + maxLength: 256 + type: 'string' required: - 'model' - 'query' diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index c91bbdb8..4693b339 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:ee0f13cf90935764a5a44bf73b50e3a766cb937ac330dd03b1b9f6583353de57 - sourceBlobDigest: sha256:4786181ada8544b07cd92a0521d3eb252237fd746407b4ce54802da36d3a6c94 + sourceRevisionDigest: sha256:069cec53ab9596fb7f42db9e42d001f5580c6018209731f3f55deb9ec0887b88 + sourceBlobDigest: sha256:cca0810c33dcaf16224704699508aa2b0d506305b1b359ac0498b4541a1c5f6b tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:ee0f13cf90935764a5a44bf73b50e3a766cb937ac330dd03b1b9f6583353de57 - sourceBlobDigest: sha256:4786181ada8544b07cd92a0521d3eb252237fd746407b4ce54802da36d3a6c94 + sourceRevisionDigest: sha256:069cec53ab9596fb7f42db9e42d001f5580c6018209731f3f55deb9ec0887b88 + sourceBlobDigest: sha256:cca0810c33dcaf16224704699508aa2b0d506305b1b359ac0498b4541a1c5f6b codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:ee461b6c8cde89dd29d1f8425e63ab42906c1c51856454f7d72eba1d1c5c34fd + codeSamplesRevisionDigest: sha256:2f3f07d57613f56ce1515fe5cd4fb6203b8c36ec492e674ff87ccaebe42e2e1b workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 06f4744a..66230210 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -2229,4 +2229,14 @@ Based on: ### Generated - [python v1.1.144] . ### Releases -- [PyPI v1.1.144] https://pypi.org/project/openrouter/1.1.144 - . \ No newline at end of file +- [PyPI v1.1.144] https://pypi.org/project/openrouter/1.1.144 - . + +## 2026-09-15 20:25:33 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.145] . +### Releases +- [PyPI v1.1.145] https://pypi.org/project/openrouter/1.1.145 - . \ No newline at end of file diff --git a/docs/components/speechrequest.mdx b/docs/components/speechrequest.mdx index a04cdc81..a74e87f8 100644 --- a/docs/components/speechrequest.mdx +++ b/docs/components/speechrequest.mdx @@ -15,4 +15,5 @@ Text-to-speech request input | `provider` | [Optional[components.SpeechRequestProvider]](../components/speechrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | | | `response_format` | [Optional[components.SpeechRequestResponseFormat]](../components/speechrequestresponseformat.mdx) | :heavy_minus_sign: | Audio output format | pcm | | `speed` | *Optional[float]* | :heavy_minus_sign: | Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers. | 1 | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | | `voice` | *Optional[str]* | :heavy_minus_sign: | Voice identifier (provider-specific). | en_paul_neutral | \ No newline at end of file diff --git a/docs/components/sttrequest.mdx b/docs/components/sttrequest.mdx index e81d9df1..39dadb91 100644 --- a/docs/components/sttrequest.mdx +++ b/docs/components/sttrequest.mdx @@ -15,4 +15,5 @@ Speech-to-text request input. Accepts a JSON body with input_audio containing ba | `provider` | [Optional[components.STTRequestProvider]](../components/sttrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | | | `response_format` | [Optional[components.STTRequestResponseFormat]](../components/sttrequestresponseformat.mdx) | :heavy_minus_sign: | Output format. "json" (default) returns \{ text, usage }. "verbose_json" additionally returns task, language, duration, and segment-level timestamps; only supported by OpenAI-compatible providers. | json | | `temperature` | *Optional[float]* | :heavy_minus_sign: | Sampling temperature for transcription | 0 | -| `timestamp_granularities` | List[[components.STTTimestampGranularity](../components/stttimestampgranularity.mdx)] | :heavy_minus_sign: | Timestamp detail levels to include when response_format is "verbose_json". "segment" returns segment-level timestamps; "word" additionally returns word-level timestamps in the words array. Ignored unless response_format is "verbose_json". | [
"segment"
] | \ No newline at end of file +| `timestamp_granularities` | List[[components.STTTimestampGranularity](../components/stttimestampgranularity.mdx)] | :heavy_minus_sign: | Timestamp detail levels to include when response_format is "verbose_json". "segment" returns segment-level timestamps; "word" additionally returns word-level timestamps in the words array. Ignored unless response_format is "verbose_json". | [
"segment"
] | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | \ No newline at end of file diff --git a/docs/components/videogenerationrequest.mdx b/docs/components/videogenerationrequest.mdx index e53114a3..190ba46e 100644 --- a/docs/components/videogenerationrequest.mdx +++ b/docs/components/videogenerationrequest.mdx @@ -19,4 +19,5 @@ title: "VideoGenerationRequest" | `resolution` | [Optional[components.VideoGenerationRequestResolution]](../components/videogenerationrequestresolution.mdx) | :heavy_minus_sign: | Resolution of the generated video | 720p | | `seed` | *Optional[int]* | :heavy_minus_sign: | If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. | | | `size` | *Optional[str]* | :heavy_minus_sign: | Exact pixel dimensions of the generated video in "WIDTHxHEIGHT" format (e.g. "1280x720"). Interchangeable with resolution + aspect_ratio. | 1280x720 | -| `upscale_factor` | *Optional[float]* | :heavy_minus_sign: | Upscale factor for video upscaling models only. This parameter is not supported by video generation models. | 2 | \ No newline at end of file +| `upscale_factor` | *Optional[float]* | :heavy_minus_sign: | Upscale factor for video upscaling models only. This parameter is not supported by video generation models. | 2 | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | \ No newline at end of file diff --git a/docs/operations/creatererankrequestbody.mdx b/docs/operations/creatererankrequestbody.mdx index b5640657..e270760c 100644 --- a/docs/operations/creatererankrequestbody.mdx +++ b/docs/operations/creatererankrequestbody.mdx @@ -7,10 +7,11 @@ Rerank request input ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `documents` | List[[operations.Document](../operations/document.mdx)] | :heavy_check_mark: | The list of documents to rerank. Documents may be plain strings, or structured objects with `text` and/or `image` for multimodal models. | [
"Paris is the capital of France.",
"Berlin is the capital of Germany."
] | -| `model` | *str* | :heavy_check_mark: | The rerank model to use | cohere/rerank-v3.5 | -| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | :heavy_minus_sign: | N/A | \{
"allow_fallbacks": true
} | -| `query` | *str* | :heavy_check_mark: | The search query to rerank documents against | What is the capital of France? | -| `top_n` | *Optional[int]* | :heavy_minus_sign: | Number of most relevant documents to return | 3 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `documents` | List[[operations.Document](../operations/document.mdx)] | :heavy_check_mark: | The list of documents to rerank. Documents may be plain strings, or structured objects with `text` and/or `image` for multimodal models. | [
"Paris is the capital of France.",
"Berlin is the capital of Germany."
] | +| `model` | *str* | :heavy_check_mark: | The rerank model to use | cohere/rerank-v3.5 | +| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | :heavy_minus_sign: | N/A | \{
"allow_fallbacks": true
} | +| `query` | *str* | :heavy_check_mark: | The search query to rerank documents against | What is the capital of France? | +| `top_n` | *Optional[int]* | :heavy_minus_sign: | Number of most relevant documents to return | 3 | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | \ No newline at end of file diff --git a/docs/sdks/rerank/README.mdx b/docs/sdks/rerank/README.mdx index ad1d6f89..cfabc30e 100644 --- a/docs/sdks/rerank/README.mdx +++ b/docs/sdks/rerank/README.mdx @@ -51,6 +51,7 @@ with OpenRouter( | `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | | `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | N/A | \{
"allow_fallbacks": true
} | | `top_n` | *Optional[int]* | :heavy_minus_sign: | Number of most relevant documents to return | 3 | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | ### Response diff --git a/docs/sdks/stt/README.mdx b/docs/sdks/stt/README.mdx index e3d07101..17d24017 100644 --- a/docs/sdks/stt/README.mdx +++ b/docs/sdks/stt/README.mdx @@ -54,6 +54,7 @@ with OpenRouter( | `response_format` | [Optional[components.STTRequestResponseFormat]](../../components/sttrequestresponseformat.mdx) | :heavy_minus_sign: | Output format. "json" (default) returns \{ text, usage }. "verbose_json" additionally returns task, language, duration, and segment-level timestamps; only supported by OpenAI-compatible providers. | json | | `temperature` | *Optional[float]* | :heavy_minus_sign: | Sampling temperature for transcription | 0 | | `timestamp_granularities` | List[[components.STTTimestampGranularity](../../components/stttimestampgranularity.mdx)] | :heavy_minus_sign: | Timestamp detail levels to include when response_format is "verbose_json". "segment" returns segment-level timestamps; "word" additionally returns word-level timestamps in the words array. Ignored unless response_format is "verbose_json". | [
"segment"
] | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | ### Response diff --git a/docs/sdks/tts/README.mdx b/docs/sdks/tts/README.mdx index 80af14ec..ec16529c 100644 --- a/docs/sdks/tts/README.mdx +++ b/docs/sdks/tts/README.mdx @@ -49,6 +49,7 @@ with OpenRouter( | `provider` | [Optional[components.SpeechRequestProvider]](../../components/speechrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | | | `response_format` | [Optional[components.SpeechRequestResponseFormat]](../../components/speechrequestresponseformat.mdx) | :heavy_minus_sign: | Audio output format | pcm | | `speed` | *Optional[float]* | :heavy_minus_sign: | Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers. | 1 | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | | `voice` | *Optional[str]* | :heavy_minus_sign: | Voice identifier (provider-specific). | en_paul_neutral | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | diff --git a/docs/sdks/videogeneration/README.mdx b/docs/sdks/videogeneration/README.mdx index b73d8195..9ba8081e 100644 --- a/docs/sdks/videogeneration/README.mdx +++ b/docs/sdks/videogeneration/README.mdx @@ -60,6 +60,7 @@ with OpenRouter( | `seed` | *Optional[int]* | :heavy_minus_sign: | If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. | | | `size` | *Optional[str]* | :heavy_minus_sign: | Exact pixel dimensions of the generated video in "WIDTHxHEIGHT" format (e.g. "1280x720"). Interchangeable with resolution + aspect_ratio. | 1280x720 | | `upscale_factor` | *Optional[float]* | :heavy_minus_sign: | Upscale factor for video upscaling models only. This parameter is not supported by video generation models. | 2 | +| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | ### Response diff --git a/pyproject.toml b/pyproject.toml index bbf6a561..64c95ecf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.144" +version = "1.1.145" 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 b4f8e9ce..23a5fe01 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.144" +__version__: str = "1.1.145" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.144 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.145 2.914.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/speechrequest.py b/src/openrouter/components/speechrequest.py index a94e0835..7d85d8d0 100644 --- a/src/openrouter/components/speechrequest.py +++ b/src/openrouter/components/speechrequest.py @@ -64,6 +64,8 @@ class SpeechRequestTypedDict(TypedDict): r"""Audio output format""" speed: NotRequired[float] r"""Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers.""" + user: NotRequired[str] + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" voice: NotRequired[str] r"""Voice identifier (provider-specific).""" @@ -89,13 +91,23 @@ class SpeechRequest(BaseModel): speed: Optional[float] = None r"""Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers.""" + user: Optional[str] = None + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" + voice: Optional[str] = None r"""Voice identifier (provider-specific).""" @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( - ["input_references", "provider", "response_format", "speed", "voice"] + [ + "input_references", + "provider", + "response_format", + "speed", + "user", + "voice", + ] ) serialized = handler(self) m = {} diff --git a/src/openrouter/components/sttrequest.py b/src/openrouter/components/sttrequest.py index ce7ba259..175d4308 100644 --- a/src/openrouter/components/sttrequest.py +++ b/src/openrouter/components/sttrequest.py @@ -67,6 +67,8 @@ class STTRequestTypedDict(TypedDict): r"""Sampling temperature for transcription""" timestamp_granularities: NotRequired[List[STTTimestampGranularity]] r"""Timestamp detail levels to include when response_format is \"verbose_json\". \"segment\" returns segment-level timestamps; \"word\" additionally returns word-level timestamps in the words array. Ignored unless response_format is \"verbose_json\".""" + user: NotRequired[str] + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" class STTRequest(BaseModel): @@ -93,6 +95,9 @@ class STTRequest(BaseModel): timestamp_granularities: Optional[List[STTTimestampGranularity]] = None r"""Timestamp detail levels to include when response_format is \"verbose_json\". \"segment\" returns segment-level timestamps; \"word\" additionally returns word-level timestamps in the words array. Ignored unless response_format is \"verbose_json\".""" + user: Optional[str] = None + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( @@ -102,6 +107,7 @@ def serialize_model(self, handler): "response_format", "temperature", "timestamp_granularities", + "user", ] ) serialized = handler(self) diff --git a/src/openrouter/components/videogenerationrequest.py b/src/openrouter/components/videogenerationrequest.py index 251f8543..98b5556f 100644 --- a/src/openrouter/components/videogenerationrequest.py +++ b/src/openrouter/components/videogenerationrequest.py @@ -740,6 +740,8 @@ class VideoGenerationRequestTypedDict(TypedDict): r"""Exact pixel dimensions of the generated video in \"WIDTHxHEIGHT\" format (e.g. \"1280x720\"). Interchangeable with resolution + aspect_ratio.""" upscale_factor: NotRequired[float] r"""Upscale factor for video upscaling models only. This parameter is not supported by video generation models.""" + user: NotRequired[str] + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" class VideoGenerationRequest(BaseModel): @@ -784,6 +786,9 @@ class VideoGenerationRequest(BaseModel): upscale_factor: Optional[float] = None r"""Upscale factor for video upscaling models only. This parameter is not supported by video generation models.""" + user: Optional[str] = None + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( @@ -801,6 +806,7 @@ def serialize_model(self, handler): "seed", "size", "upscale_factor", + "user", ] ) serialized = handler(self) diff --git a/src/openrouter/operations/creatererank.py b/src/openrouter/operations/creatererank.py index 3786a979..5bc35def 100644 --- a/src/openrouter/operations/creatererank.py +++ b/src/openrouter/operations/creatererank.py @@ -139,6 +139,8 @@ class CreateRerankRequestBodyTypedDict(TypedDict): ] top_n: NotRequired[int] r"""Number of most relevant documents to return""" + user: NotRequired[str] + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" class CreateRerankRequestBody(BaseModel): @@ -160,9 +162,12 @@ class CreateRerankRequestBody(BaseModel): top_n: Optional[int] = None r"""Number of most relevant documents to return""" + user: Optional[str] = None + r"""A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["provider", "top_n"]) + optional_fields = set(["provider", "top_n", "user"]) nullable_fields = set(["provider"]) serialized = handler(self) m = {} diff --git a/src/openrouter/rerank.py b/src/openrouter/rerank.py index 327778a8..dcf9614b 100644 --- a/src/openrouter/rerank.py +++ b/src/openrouter/rerank.py @@ -35,6 +35,7 @@ def rerank( ] ] = UNSET, top_n: Optional[int] = None, + user: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, accept_header_override: Optional[RerankAcceptEnum] = None, @@ -57,6 +58,7 @@ def rerank( :param provider: :param top_n: Number of most relevant documents to return + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -87,6 +89,7 @@ def rerank( ), query=query, top_n=top_n, + user=user, ), ) @@ -247,6 +250,7 @@ async def rerank_async( ] ] = UNSET, top_n: Optional[int] = None, + user: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, accept_header_override: Optional[RerankAcceptEnum] = None, @@ -269,6 +273,7 @@ async def rerank_async( :param provider: :param top_n: Number of most relevant documents to return + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -299,6 +304,7 @@ async def rerank_async( ), query=query, top_n=top_n, + user=user, ), ) diff --git a/src/openrouter/stt.py b/src/openrouter/stt.py index d0fcdf07..16a9e4f4 100644 --- a/src/openrouter/stt.py +++ b/src/openrouter/stt.py @@ -29,6 +29,7 @@ def create_transcription( timestamp_granularities: Optional[ Iterable[components.STTTimestampGranularity] ] = None, + user: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -52,6 +53,7 @@ def create_transcription( :param response_format: Output format. \"json\" (default) returns { text, usage }. \"verbose_json\" additionally returns task, language, duration, and segment-level timestamps; only supported by OpenAI-compatible providers. :param temperature: Sampling temperature for transcription :param timestamp_granularities: Timestamp detail levels to include when response_format is \"verbose_json\". \"segment\" returns segment-level timestamps; \"word\" additionally returns word-level timestamps in the words array. Ignored unless response_format is \"verbose_json\". + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -86,6 +88,7 @@ def create_transcription( timestamp_granularities, Optional[List[components.STTTimestampGranularity]], ), + user=user, ), ) @@ -236,6 +239,7 @@ async def create_transcription_async( timestamp_granularities: Optional[ Iterable[components.STTTimestampGranularity] ] = None, + user: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -259,6 +263,7 @@ async def create_transcription_async( :param response_format: Output format. \"json\" (default) returns { text, usage }. \"verbose_json\" additionally returns task, language, duration, and segment-level timestamps; only supported by OpenAI-compatible providers. :param temperature: Sampling temperature for transcription :param timestamp_granularities: Timestamp detail levels to include when response_format is \"verbose_json\". \"segment\" returns segment-level timestamps; \"word\" additionally returns word-level timestamps in the words array. Ignored unless response_format is \"verbose_json\". + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -293,6 +298,7 @@ async def create_transcription_async( timestamp_granularities, Optional[List[components.STTTimestampGranularity]], ), + user=user, ), ) diff --git a/src/openrouter/tts.py b/src/openrouter/tts.py index 4b92059b..621ca762 100644 --- a/src/openrouter/tts.py +++ b/src/openrouter/tts.py @@ -35,6 +35,7 @@ def create_speech( ] = None, response_format: Optional[components.SpeechRequestResponseFormat] = "pcm", speed: Optional[float] = None, + user: Optional[str] = None, voice: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -58,6 +59,7 @@ def create_speech( :param provider: Provider-specific passthrough configuration :param response_format: Audio output format :param speed: Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers. + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param voice: Voice identifier (provider-specific). :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -89,6 +91,7 @@ def create_speech( ), response_format=response_format, speed=speed, + user=user, voice=voice, ), ) @@ -277,6 +280,7 @@ async def create_speech_async( ] = None, response_format: Optional[components.SpeechRequestResponseFormat] = "pcm", speed: Optional[float] = None, + user: Optional[str] = None, voice: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -300,6 +304,7 @@ async def create_speech_async( :param provider: Provider-specific passthrough configuration :param response_format: Audio output format :param speed: Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers. + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param voice: Voice identifier (provider-specific). :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -331,6 +336,7 @@ async def create_speech_async( ), response_format=response_format, speed=speed, + user=user, voice=voice, ), ) diff --git a/src/openrouter/video_generation.py b/src/openrouter/video_generation.py index b81833ba..fd346237 100644 --- a/src/openrouter/video_generation.py +++ b/src/openrouter/video_generation.py @@ -48,6 +48,7 @@ def generate( seed: Optional[int] = None, size: Optional[str] = None, upscale_factor: Optional[float] = None, + user: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -78,6 +79,7 @@ def generate( :param seed: If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. :param size: Exact pixel dimensions of the generated video in \"WIDTHxHEIGHT\" format (e.g. \"1280x720\"). Interchangeable with resolution + aspect_ratio. :param upscale_factor: Upscale factor for video upscaling models only. This parameter is not supported by video generation models. + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -118,6 +120,7 @@ def generate( seed=seed, size=size, upscale_factor=upscale_factor, + user=user, ), ) @@ -270,6 +273,7 @@ async def generate_async( seed: Optional[int] = None, size: Optional[str] = None, upscale_factor: Optional[float] = None, + user: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -300,6 +304,7 @@ async def generate_async( :param seed: If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. :param size: Exact pixel dimensions of the generated video in \"WIDTHxHEIGHT\" format (e.g. \"1280x720\"). Interchangeable with resolution + aspect_ratio. :param upscale_factor: Upscale factor for video upscaling models only. This parameter is not supported by video generation models. + :param user: A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -340,6 +345,7 @@ async def generate_async( seed=seed, size=size, upscale_factor=upscale_factor, + user=user, ), ) diff --git a/uv.lock b/uv.lock index 50120c5b..a824fb26 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.144" +version = "1.1.145" source = { editable = "." } dependencies = [ { name = "httpcore" }, From cbab8cfd7ccc17bbd9761b87671709a6b52e521c Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Tue, 15 Sep 2026 20:27:53 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow