From ec2f69fc88e97fe0d5464ad1775c9ac66897932d Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 24 Jul 2026 00:19:13 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `open_router.stt.create_transcription()`: `response` **Changed** * `open_router.stt.create_transcription_multipart()`: `response` **Changed** --- .speakeasy/gen.lock | 41 +++++++++++++------------ .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 10 ++++++ .speakeasy/workflow.lock | 10 +++--- RELEASES.md | 12 +++++++- docs/components/sttsegment.mdx | 25 +++++++-------- docs/components/sttword.mdx | 11 ++++--- pyproject.toml | 2 +- src/openrouter/_version.py | 4 +-- src/openrouter/components/sttsegment.py | 6 ++++ src/openrouter/components/sttword.py | 27 ++++++++++++++-- uv.lock | 2 +- 12 files changed, 103 insertions(+), 49 deletions(-) diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index cf093aa9..1ac23179 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: 567e91601425bf6d1e14d521ccd965b5 + docChecksum: 7c73fc82e3b559187d95080944e17ae3 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.0.15 - configChecksum: afb0b977249acfd2c024c26a420a6f93 + releaseVersion: 1.0.16 + configChecksum: 14100939de9468cafe0363e64ecd242b repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: dcdf230d-bf02-48a0-b82a-629afd178bfb - pristine_commit_hash: 7b5887ebadc773266691917187f89f17b8bfadbc - pristine_tree_hash: 3fe6aadc616a5e45cee2804552ad7377741114da + generation_id: 91a83737-413d-4ebf-8b81-cba612bb82a7 + pristine_commit_hash: df168c0627b3ec7713e6d637072981c708cf254d + pristine_tree_hash: 9ab72283bdc3555622e6aab6dd4e6c85409b26f5 features: python: acceptHeaders: 3.0.0 @@ -4606,8 +4606,8 @@ trackedFiles: pristine_git_object: 5868e50f86df62aae9952c94f98ebb33570efff1 docs/components/sttsegment.mdx: id: 7264ea9cdd57 - last_write_checksum: sha1:8a4996d6a483fdeee0899f6656ed6e5d69a4e159 - pristine_git_object: d0bcd9afe39262dd4297adb6fc618e984e1c209f + last_write_checksum: sha1:a72a8567ac80b37f20db0e483de5b1c96d45e5fe + pristine_git_object: 78744c25e6714a49518190e39107c59720c9b58d docs/components/stttimestampgranularity.mdx: id: 2a365c57c3a1 last_write_checksum: sha1:5932b36c214d97201f0cce0d0787203fed2baf4e @@ -4618,8 +4618,8 @@ trackedFiles: pristine_git_object: f0b56839c067ce29024888f689d379ed83f86ff4 docs/components/sttword.mdx: id: 665227ec6052 - last_write_checksum: sha1:e39fb80f3b8d02747142ab15631e4788810c366f - pristine_git_object: 994522a52060add3b501680d2be27546ded1dfe2 + last_write_checksum: sha1:ca6d433725166bfcfd3399f17f1f02776e82ade7 + pristine_git_object: 906d1fe7948b251c227043b24dedb7d4c56bcea1 docs/components/subagentnestedtool.mdx: id: 12547a9efd5f last_write_checksum: sha1:60f49c10d3b5c552a65ef4462d24e02a615cbaa8 @@ -6718,8 +6718,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:f683ea987b2d91726e7dde5663d1a59e49aa5765 - pristine_git_object: 26393b0b28956ec3fd9535d9115d8a1c940a7434 + last_write_checksum: sha1:22aa3e9cbb8047f3069f7193823715d4c9456d31 + pristine_git_object: 96c3e76a32c2ed6dfd680269fb45c9f3fd10e91b scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -6746,8 +6746,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:4bc902fcebdfc77a7b6b4c7ba65434142175f623 - pristine_git_object: 902c273cbf33c63ad2e2fa73baf5d77b725da304 + last_write_checksum: sha1:719b380996f3571f1f23b33d6890ba6539b5e38f + pristine_git_object: f4ca20a204674f77a58f7c3c092a53f619d10242 src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:9e709b71dd0611056dc0cec6150b578defe32841 @@ -8770,8 +8770,8 @@ trackedFiles: pristine_git_object: 61daeb24ef51df79db5fa62329f8d15d81d729d9 src/openrouter/components/sttsegment.py: id: f3439539736c - last_write_checksum: sha1:be08482dc37814ed812250622b4ecb346b31787a - pristine_git_object: 471a0806203bea27421e0681e4b48cda9ce23220 + last_write_checksum: sha1:9b19b8c0becf911a2939c28314d999b4e3efcf14 + pristine_git_object: 024e8a332cd8604dcc81c035121140716104e26e src/openrouter/components/stttimestampgranularity.py: id: d6f8b068026d last_write_checksum: sha1:9d1aff48024b9ab1446a05784f9aeb33aebdcee4 @@ -8782,8 +8782,8 @@ trackedFiles: pristine_git_object: 1feb5db4da1422d55744c5a4bb10eabda6c50c4f src/openrouter/components/sttword.py: id: b46ff7c5fa20 - last_write_checksum: sha1:69fc17c2b943ace9486b782f7250579ba8d454b0 - pristine_git_object: 020dd01249eb982b0e94f0c19748badf5287a31a + last_write_checksum: sha1:110e24e80ce5cf5ce2fa9272904fc4c32f538110 + pristine_git_object: 4d300cd3172215697a9ec551a889135628cee676 src/openrouter/components/subagentnestedtool.py: id: 911a465973a0 last_write_checksum: sha1:6aff7a7050393855944bbf85d437800336d12215 @@ -11241,4 +11241,7 @@ examples: "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} examplesVersion: 1.0.2 -releaseNotes: "## Python SDK Changes:\n* `open_router.tts.create_speech()`: \n * `request.provider.options` **Changed**\n* `open_router.stt.create_transcription()`: \n * `request.provider.options` **Changed**\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* `open_router.images.generate()`: \n * `request.provider.options` **Changed**\n* `open_router.video_generation.generate()`: \n * `request.provider.options` **Changed**\n" +releaseNotes: | + ## Python SDK Changes: + * `open_router.stt.create_transcription()`: `response` **Changed** + * `open_router.stt.create_transcription_multipart()`: `response` **Changed** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index aca09003..0b3a3920 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.0.15 + version: 1.0.16 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 0b171e29..455045c8 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -21817,6 +21817,7 @@ components: id: 0 no_speech_prob: 0.01 seek: 0 + speaker: 0 start: 0 temperature: 0 text: 'Hello there.' @@ -21850,6 +21851,10 @@ components: description: 'Seek offset of the segment' example: 0 type: 'integer' + speaker: + description: 'Speaker index for the segment, present when the provider returns diarization data' + example: 0 + type: 'integer' start: description: 'Segment start time in seconds' example: 0 @@ -21918,6 +21923,7 @@ components: description: 'A timestamped word, returned when the provider includes word-level timestamps' example: end: 0.4 + speaker: 0 start: 0 word: 'Hello' properties: @@ -21926,6 +21932,10 @@ components: example: 0.4 format: 'double' type: 'number' + speaker: + description: 'Speaker index for the word, present when the provider returns diarization data' + example: 0 + type: 'integer' start: description: 'Word start time in seconds' example: 0 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 5daa35a3..49535d45 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:8c16d3b18a11a7180f5a48c6b154dad8c0f7ebc2cb3a15bc287276bcc7ed097b - sourceBlobDigest: sha256:1c7e1b4ca94f149a352d532529df8d91755f374c2c63b3348a89b402e0074042 + sourceRevisionDigest: sha256:927690f3b7513ac384577426ddc3ab6f33ace91470134513a640477be3d5e985 + sourceBlobDigest: sha256:e8767ddd2466ce51af8597f7a78aabf27e583167d20b7c5532afaca59d4ccc04 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:8c16d3b18a11a7180f5a48c6b154dad8c0f7ebc2cb3a15bc287276bcc7ed097b - sourceBlobDigest: sha256:1c7e1b4ca94f149a352d532529df8d91755f374c2c63b3348a89b402e0074042 + sourceRevisionDigest: sha256:927690f3b7513ac384577426ddc3ab6f33ace91470134513a640477be3d5e985 + sourceBlobDigest: sha256:e8767ddd2466ce51af8597f7a78aabf27e583167d20b7c5532afaca59d4ccc04 codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:572eae0a39d1d0420b7d4991aa016251d51c0ebe16c3f624ef8b721302c1d545 + codeSamplesRevisionDigest: sha256:fb6bd97e300671bee7d7685185eb9ec8fc11d937be64cd114438d62b9e8bc316 workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 0d59cec0..77b38b96 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -729,4 +729,14 @@ Based on: ### Generated - [python v1.0.15] . ### Releases -- [PyPI v1.0.15] https://pypi.org/project/openrouter/1.0.15 - . \ No newline at end of file +- [PyPI v1.0.15] https://pypi.org/project/openrouter/1.0.15 - . + +## 2026-07-24 00:17:15 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.0.16] . +### Releases +- [PyPI v1.0.16] https://pypi.org/project/openrouter/1.0.16 - . \ No newline at end of file diff --git a/docs/components/sttsegment.mdx b/docs/components/sttsegment.mdx index d0bcd9af..78744c25 100644 --- a/docs/components/sttsegment.mdx +++ b/docs/components/sttsegment.mdx @@ -7,15 +7,16 @@ A timestamped transcript segment, returned when response_format is verbose_json ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | -| `avg_logprob` | *Optional[float]* | :heavy_minus_sign: | Average log probability of the segment | | -| `compression_ratio` | *Optional[float]* | :heavy_minus_sign: | Compression ratio of the segment | | -| `end` | *float* | :heavy_check_mark: | Segment end time in seconds | 3.2 | -| `id` | *int* | :heavy_check_mark: | Segment index within the transcript | 0 | -| `no_speech_prob` | *Optional[float]* | :heavy_minus_sign: | Probability the segment contains no speech | | -| `seek` | *Optional[int]* | :heavy_minus_sign: | Seek offset of the segment | 0 | -| `start` | *float* | :heavy_check_mark: | Segment start time in seconds | 0 | -| `temperature` | *Optional[float]* | :heavy_minus_sign: | Temperature used for the segment | | -| `text` | *str* | :heavy_check_mark: | Transcribed text of the segment | Hello there. | -| `tokens` | List[*int*] | :heavy_minus_sign: | Token IDs of the segment | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `avg_logprob` | *Optional[float]* | :heavy_minus_sign: | Average log probability of the segment | | +| `compression_ratio` | *Optional[float]* | :heavy_minus_sign: | Compression ratio of the segment | | +| `end` | *float* | :heavy_check_mark: | Segment end time in seconds | 3.2 | +| `id` | *int* | :heavy_check_mark: | Segment index within the transcript | 0 | +| `no_speech_prob` | *Optional[float]* | :heavy_minus_sign: | Probability the segment contains no speech | | +| `seek` | *Optional[int]* | :heavy_minus_sign: | Seek offset of the segment | 0 | +| `speaker` | *Optional[int]* | :heavy_minus_sign: | Speaker index for the segment, present when the provider returns diarization data | 0 | +| `start` | *float* | :heavy_check_mark: | Segment start time in seconds | 0 | +| `temperature` | *Optional[float]* | :heavy_minus_sign: | Temperature used for the segment | | +| `text` | *str* | :heavy_check_mark: | Transcribed text of the segment | Hello there. | +| `tokens` | List[*int*] | :heavy_minus_sign: | Token IDs of the segment | | \ No newline at end of file diff --git a/docs/components/sttword.mdx b/docs/components/sttword.mdx index 994522a5..906d1fe7 100644 --- a/docs/components/sttword.mdx +++ b/docs/components/sttword.mdx @@ -7,8 +7,9 @@ A timestamped word, returned when the provider includes word-level timestamps ## Fields -| Field | Type | Required | Description | Example | -| -------------------------- | -------------------------- | -------------------------- | -------------------------- | -------------------------- | -| `end` | *float* | :heavy_check_mark: | Word end time in seconds | 0.4 | -| `start` | *float* | :heavy_check_mark: | Word start time in seconds | 0 | -| `word` | *str* | :heavy_check_mark: | The transcribed word | Hello | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `end` | *float* | :heavy_check_mark: | Word end time in seconds | 0.4 | +| `speaker` | *Optional[int]* | :heavy_minus_sign: | Speaker index for the word, present when the provider returns diarization data | 0 | +| `start` | *float* | :heavy_check_mark: | Word start time in seconds | 0 | +| `word` | *str* | :heavy_check_mark: | The transcribed word | Hello | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 26393b0b..96c3e76a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.0.15" +version = "1.0.16" 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 902c273c..f4ca20a2 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "1.0.15" +__version__: str = "1.0.16" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.0.15 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.0.16 2.914.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/sttsegment.py b/src/openrouter/components/sttsegment.py index 471a0806..024e8a33 100644 --- a/src/openrouter/components/sttsegment.py +++ b/src/openrouter/components/sttsegment.py @@ -26,6 +26,8 @@ class STTSegmentTypedDict(TypedDict): r"""Probability the segment contains no speech""" seek: NotRequired[int] r"""Seek offset of the segment""" + speaker: NotRequired[int] + r"""Speaker index for the segment, present when the provider returns diarization data""" temperature: NotRequired[float] r"""Temperature used for the segment""" tokens: NotRequired[List[int]] @@ -59,6 +61,9 @@ class STTSegment(BaseModel): seek: Optional[int] = None r"""Seek offset of the segment""" + speaker: Optional[int] = None + r"""Speaker index for the segment, present when the provider returns diarization data""" + temperature: Optional[float] = None r"""Temperature used for the segment""" @@ -73,6 +78,7 @@ def serialize_model(self, handler): "compression_ratio", "no_speech_prob", "seek", + "speaker", "temperature", "tokens", ] diff --git a/src/openrouter/components/sttword.py b/src/openrouter/components/sttword.py index 020dd012..4d300cd3 100644 --- a/src/openrouter/components/sttword.py +++ b/src/openrouter/components/sttword.py @@ -1,8 +1,10 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from openrouter.types import BaseModel -from typing_extensions import TypedDict +from openrouter.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict class STTWordTypedDict(TypedDict): @@ -14,6 +16,8 @@ class STTWordTypedDict(TypedDict): r"""Word start time in seconds""" word: str r"""The transcribed word""" + speaker: NotRequired[int] + r"""Speaker index for the word, present when the provider returns diarization data""" class STTWord(BaseModel): @@ -27,3 +31,22 @@ class STTWord(BaseModel): word: str r"""The transcribed word""" + + speaker: Optional[int] = None + r"""Speaker index for the word, present when the provider returns diarization data""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["speaker"]) + 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: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/uv.lock b/uv.lock index 8a117beb..2fabdaec 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.0.15" +version = "1.0.16" source = { editable = "." } dependencies = [ { name = "httpcore" }, From 9f154b61b03122d33435fb4a61f9993894accd24 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 00:19:19 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow