From f07767926f17a26973e2a90d8bf9ca12bf70e992 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 7 Aug 2026 18:27:38 +0000 Subject: [PATCH 1/2] ci: regenerated with OpenAPI Doc , Speakeasy CLI 1.787.0 --- .speakeasy/gen.lock | 37 +++++++++---------- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 4 +- .speakeasy/workflow.lock | 10 ++--- RELEASES.md | 12 +++++- docs/components/fusionplugin.mdx | 2 +- docs/components/fusionservertoolconfig.mdx | 2 +- pyproject.toml | 2 +- src/openrouter/_version.py | 4 +- src/openrouter/components/fusionplugin.py | 4 +- .../components/fusionservertoolconfig.py | 4 +- uv.lock | 2 +- 12 files changed, 47 insertions(+), 38 deletions(-) diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 5f8e090b..66c64315 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: 4131153ef3975a36cc8d72170d342480 + docChecksum: 01fc86077124f57b35827aad2e4f8755 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.32 - configChecksum: edf32d3cec9d4c5f92e9eae2b5deb8eb + releaseVersion: 1.1.33 + configChecksum: 65453bab23b113af1a31879f7fc03dc4 repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 734c4bb5-f98f-44b8-a4db-9c538e7df340 - pristine_commit_hash: 10cb0a4dd3ddab140f172ceac0ba940c2f051cf1 - pristine_tree_hash: 6d7fc5b6e9e0879e726e4ecd073aedfda2b6cfbc + generation_id: 20ad2ca1-60f6-48a0-95d6-167fd27a897e + pristine_commit_hash: 1f0772b40020e57dc94553158c5e20e89d919726 + pristine_tree_hash: 5d1172658a619a126815e21cfbe55b6058fecc48 features: python: acceptHeaders: 3.0.0 @@ -2082,8 +2082,8 @@ trackedFiles: pristine_git_object: 7b7d7a350209a88f9a688d1fab6d88fc4754664e docs/components/fusionplugin.mdx: id: 91c7b4638c7e - last_write_checksum: sha1:2361b03ff5f2910737adf0b8faee2493a63a6fb1 - pristine_git_object: 269960766fecb39f0ead44af2cb142548d8d73b1 + last_write_checksum: sha1:870595df572ae4a17b4daee349e13d8193c57241 + pristine_git_object: 32a6b478678908aa7a2df9cc15398a4490741be3 docs/components/fusionpluginid.mdx: id: 2b90bfd2d611 last_write_checksum: sha1:8111a4424197eb86dfccedfdc798d1a2b5a1c39e @@ -2094,8 +2094,8 @@ trackedFiles: pristine_git_object: 967c0e2abcf18d52589d674bdf45d0414050b71f docs/components/fusionservertoolconfig.mdx: id: 87976811b0c3 - last_write_checksum: sha1:9a167625bd084e1bcb317ec7b88b490c79490a3d - pristine_git_object: 00c2183f63a67622cb53109ca8e8887473e07b07 + last_write_checksum: sha1:b8341724db9e04e9dce2eed0568320ddbda06387 + pristine_git_object: 2ab57e1087166f7728b2f32bbe43d500cbb8b1a8 docs/components/fusionservertoolconfigeffort.mdx: id: f5ce0fbc94aa last_write_checksum: sha1:6cefaed8456c5ca47af14755dcfa0df67589f59a @@ -7102,8 +7102,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:65343bcdff44f49aa04254e5a1641625cb4cd8f4 - pristine_git_object: 049afe5af688a8782651d3ee9c7c1f6929e3e009 + last_write_checksum: sha1:d94daad013b97144210fa250e9e3932cc1baf4e8 + pristine_git_object: b2c3f31ea4987ae8992b8774f28c002b16b9448c scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7130,8 +7130,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:64bc411e30ab25dff899a976fd19988601df598a - pristine_git_object: 00ac74e9c910e33e163ec1cb772d4f99703b9dd1 + last_write_checksum: sha1:606df2cc0a90a8a44622c53b0dfb293334fb8668 + pristine_git_object: 62dec07925df42249632f250769525a6e64f0fbe src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:3ea0f1c73fb9c101b7bc5719da4dd7bf62ff469a @@ -8082,16 +8082,16 @@ trackedFiles: pristine_git_object: 2836ce37ac58b2b90568bbd6247fa52b982ef131 src/openrouter/components/fusionplugin.py: id: c0b307f15bb0 - last_write_checksum: sha1:5178b40046c291eca6b890290bfeef9e5db6885c - pristine_git_object: 9ec723b1f05f5cf6cd28987d58d6e5c542756b2c + last_write_checksum: sha1:ccfc15d5b3295c565987f457c86731a46e3f61bc + pristine_git_object: b3762615f700ff0be163417f4e88cf5b9083f0b2 src/openrouter/components/fusionservertool_openrouter.py: id: a1d6d3aefe6f last_write_checksum: sha1:b1e560ea3ed00d00dce53b8d5897e59c7face470 pristine_git_object: 6c8ceeaf14e361cee78935da98ce2da718e7f47a src/openrouter/components/fusionservertoolconfig.py: id: 0d1d229c531f - last_write_checksum: sha1:299e4b56a189e200e473037691e8e0e42feb66db - pristine_git_object: e9eec1d9f62c2aee90f3a98a4b388b2829aab9ea + last_write_checksum: sha1:ef0b6eff04b8f397fed68f91f9c23eb30279c59f + pristine_git_object: 8b33e51dead6bc8bc73e562b5ea4d3f75f27bdf8 src/openrouter/components/fusionsource.py: id: ce20a4a9f32f last_write_checksum: sha1:d38e02465da7d7d4caed6a25b3602709236d9ce6 @@ -11931,4 +11931,3 @@ examples: "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} examplesVersion: 1.0.2 -releaseNotes: "## Python SDK Changes:\n* `open_router.byok.list()`: `response.data[].workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.byok.create()`: `response.data.workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.byok.get()`: `response.data.workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.byok.update()`: `response.data.workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.guardrails.list()`: `response.data[].workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.guardrails.create()`: `response.data.workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.guardrails.get()`: `response.data.workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.guardrails.update()`: `response.data.workspace_id` **Changed** (Breaking ⚠️)\n* `open_router.observability.list()`: `response.data[]` **Changed**\n* `open_router.observability.create()`: \n * `request` **Changed**\n * `response.data` **Changed**\n* `open_router.observability.get()`: `response.data` **Changed**\n* `open_router.observability.update()`: \n * `request` **Changed**\n * `response.data` **Changed**\n * `error.status[403]` **Added**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 69579dcb..e650b231 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.32 + version: 1.1.33 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index ab27ce43..9b972f05 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -8883,7 +8883,7 @@ components: - 'fusion' type: 'string' max_tool_calls: - description: 'Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.' + description: 'Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16.' example: 12 maximum: 16 minimum: 1 @@ -8995,7 +8995,7 @@ components: example: 16384 type: 'integer' max_tool_calls: - description: 'Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.' + description: 'Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16.' example: 12 maximum: 16 minimum: 1 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 36381fe8..e6128f53 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:307eefb0b9cb80c7bcd6e8274233f680bc999188ac10bfd6df393496842ff095 - sourceBlobDigest: sha256:af592609339a6378d4829dc21a1dfe904782c6c517d33c8ad8941ebf20d5f4fa + sourceRevisionDigest: sha256:41bbc8797c78ca32b2c7be99a7be2cfb78d74e0f58d06206209e5f46f63a434b + sourceBlobDigest: sha256:204f1956ee37dd60f3320e61dbb25d4a00b7bdd4c53706328c3bed22880fd277 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:307eefb0b9cb80c7bcd6e8274233f680bc999188ac10bfd6df393496842ff095 - sourceBlobDigest: sha256:af592609339a6378d4829dc21a1dfe904782c6c517d33c8ad8941ebf20d5f4fa + sourceRevisionDigest: sha256:41bbc8797c78ca32b2c7be99a7be2cfb78d74e0f58d06206209e5f46f63a434b + sourceBlobDigest: sha256:204f1956ee37dd60f3320e61dbb25d4a00b7bdd4c53706328c3bed22880fd277 codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:57f73a362ecb31a48b07b3155670b4271701680caa3f627935a36747a7df3dd0 + codeSamplesRevisionDigest: sha256:2cbe4d5db22ca813dfb6cf94706c58913be98dc031c6357658ffb4fb0bc05fab workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index e50de21d..489ce1f7 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1109,4 +1109,14 @@ Based on: ### Generated - [python v1.1.32] . ### Releases -- [PyPI v1.1.32] https://pypi.org/project/openrouter/1.1.32 - . \ No newline at end of file +- [PyPI v1.1.32] https://pypi.org/project/openrouter/1.1.32 - . + +## 2026-08-07 18:25:23 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.33] . +### Releases +- [PyPI v1.1.33] https://pypi.org/project/openrouter/1.1.33 - . \ No newline at end of file diff --git a/docs/components/fusionplugin.mdx b/docs/components/fusionplugin.mdx index 26996076..32a6b478 100644 --- a/docs/components/fusionplugin.mdx +++ b/docs/components/fusionplugin.mdx @@ -9,7 +9,7 @@ title: "FusionPlugin" | `analysis_models` | List[*str*] | :heavy_minus_sign: | Slugs of models to run in parallel as the "expert panel" the analyst analyzes. Each model receives the same user prompt with web_search + web_fetch enabled. Capped at 8 models to bound cost amplification. When omitted, defaults to the Quality preset from the /labs/fusion UI (~anthropic/claude-opus-latest, ~openai/gpt-latest, ~google/gemini-pro-latest). | [
"~anthropic/claude-opus-latest",
"~openai/gpt-latest",
"~google/gemini-pro-latest"
] | | `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the fusion plugin for this request. Defaults to true. | | | `id` | [components.FusionPluginID](../components/fusionpluginid.mdx) | :heavy_check_mark: | N/A | | -| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16. | 12 | +| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16. | 12 | | `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the model that performs both the analyst step (with web_search + web_fetch) and the final synthesis. When omitted, defaults to the first model in the Quality preset. | ~anthropic/claude-opus-latest | | `preset` | [Optional[components.PresetEnum]](../components/presetenum.mdx) | :heavy_minus_sign: | A curated OpenRouter fusion preset (slugs follow `-`, e.g. `general-high`). Expands server-side into the preset's analysis_models panel and analyst model, so callers never name individual models. Explicitly provided `analysis_models` / `model` take precedence. | general-high | | `tools` | List[[components.FusionPluginTool](../components/fusionplugintool.mdx)] | :heavy_minus_sign: | Server tools available to panelist and analyst inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: "openrouter:web_search" }, { type: "openrouter:web_fetch" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only). | [
\{
"parameters": \{
"excluded_domains": [
"example.com"
]
},
"type": "openrouter:web_search"
},
\{
"type": "openrouter:web_fetch"
}
] | \ No newline at end of file diff --git a/docs/components/fusionservertoolconfig.mdx b/docs/components/fusionservertoolconfig.mdx index 00c2183f..2ab57e10 100644 --- a/docs/components/fusionservertoolconfig.mdx +++ b/docs/components/fusionservertoolconfig.mdx @@ -12,7 +12,7 @@ Configuration for the openrouter:fusion server tool. | `analysis_models` | List[*str*] | :heavy_minus_sign: | Slugs of models to run in parallel as the analysis panel. Each model receives the user prompt with openrouter:web_search and openrouter:web_fetch enabled, then an analyst model summarizes the collective output into structured analysis JSON. Capped at 8 models to bound cost amplification. Defaults to the Quality preset from /labs/fusion. | [
"~anthropic/claude-opus-latest",
"~openai/gpt-latest",
"~google/gemini-pro-latest"
] | | `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. When set on an individual content block, it marks an explicit cache breakpoint; block-level markers also work on OpenAI models that support explicit prompt caching — OpenRouter converts them to the provider's native format. | \{
"type": "ephemeral"
} | | `max_completion_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum number of output tokens (including reasoning tokens) each panelist and the analyst model may produce per inner call. Controls the total output budget so reasoning-heavy models like GPT-5.5 do not exhaust their token allowance before producing visible text. When omitted, panelists default to 32000 and the analyst to 20000. | 16384 | -| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16. | 12 | +| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16. | 12 | | `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the analyst model that produces the structured analysis JSON. Defaults to the model used in the outer API request. | ~anthropic/claude-opus-latest | | `reasoning` | [Optional[components.FusionServerToolConfigReasoning]](../components/fusionservertoolconfigreasoning.mdx) | :heavy_minus_sign: | Reasoning configuration forwarded to panelist and analyst inner calls. Use this to control reasoning effort and token budget for models that support extended thinking. | | | `temperature` | *Optional[float]* | :heavy_minus_sign: | Temperature forwarded to panelist inner calls. The analyst always runs at temperature 0 regardless of this value. When omitted, the provider's default applies. | 0.7 | diff --git a/pyproject.toml b/pyproject.toml index 049afe5a..b2c3f31e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.32" +version = "1.1.33" 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 00ac74e9..62dec079 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.32" +__version__: str = "1.1.33" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.32 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.33 2.914.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/fusionplugin.py b/src/openrouter/components/fusionplugin.py index 9ec723b1..b3762615 100644 --- a/src/openrouter/components/fusionplugin.py +++ b/src/openrouter/components/fusionplugin.py @@ -91,7 +91,7 @@ class FusionPluginTypedDict(TypedDict): enabled: NotRequired[bool] r"""Set to false to disable the fusion plugin for this request. Defaults to true.""" max_tool_calls: NotRequired[int] - r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.""" + r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16.""" model: NotRequired[str] r"""Slug of the model that performs both the analyst step (with web_search + web_fetch) and the final synthesis. When omitted, defaults to the first model in the Quality preset.""" preset: NotRequired[PresetEnum] @@ -110,7 +110,7 @@ class FusionPlugin(BaseModel): r"""Set to false to disable the fusion plugin for this request. Defaults to true.""" max_tool_calls: Optional[int] = None - r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.""" + r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16.""" model: Optional[str] = None r"""Slug of the model that performs both the analyst step (with web_search + web_fetch) and the final synthesis. When omitted, defaults to the first model in the Quality preset.""" diff --git a/src/openrouter/components/fusionservertoolconfig.py b/src/openrouter/components/fusionservertoolconfig.py index e9eec1d9..8b33e51d 100644 --- a/src/openrouter/components/fusionservertoolconfig.py +++ b/src/openrouter/components/fusionservertoolconfig.py @@ -102,7 +102,7 @@ class FusionServerToolConfigTypedDict(TypedDict): max_completion_tokens: NotRequired[int] r"""Maximum number of output tokens (including reasoning tokens) each panelist and the analyst model may produce per inner call. Controls the total output budget so reasoning-heavy models like GPT-5.5 do not exhaust their token allowance before producing visible text. When omitted, panelists default to 32000 and the analyst to 20000.""" max_tool_calls: NotRequired[int] - r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.""" + r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16.""" model: NotRequired[str] r"""Slug of the analyst model that produces the structured analysis JSON. Defaults to the model used in the outer API request.""" reasoning: NotRequired[FusionServerToolConfigReasoningTypedDict] @@ -126,7 +126,7 @@ class FusionServerToolConfig(BaseModel): r"""Maximum number of output tokens (including reasoning tokens) each panelist and the analyst model may produce per inner call. Controls the total output budget so reasoning-heavy models like GPT-5.5 do not exhaust their token allowance before producing visible text. When omitted, panelists default to 32000 and the analyst to 20000.""" max_tool_calls: Optional[int] = None - r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.""" + r"""Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 4. Capped at 16.""" model: Optional[str] = None r"""Slug of the analyst model that produces the structured analysis JSON. Defaults to the model used in the outer API request.""" diff --git a/uv.lock b/uv.lock index ffd19ac8..4d4acc27 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.32" +version = "1.1.33" source = { editable = "." } dependencies = [ { name = "httpcore" }, From efeef0ad24d83d7a75d9d5364cb7d3027820226f Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 18:27:45 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow