From ed5d146d4d7c1242fe0e9e4a47e23b2ff786ae32 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Tue, 4 Aug 2026 21:07:10 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `open_router.beta.analytics.query_analytics()`: * `request.filters[].include_unset` **Added** * `open_router.presets.create_presets_messages()`: `request` **Changed** --- .speakeasy/gen.lock | 73 +++++++---- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 116 ++++++++++++++++++ .speakeasy/workflow.lock | 10 +- RELEASES.md | 12 +- .../messagesbashtoolresultblock.mdx | 14 +++ .../messagesbashtoolresultblocktype.mdx | 15 +++ .../messagesmessageparamcontentunion4.mdx | 12 ++ docs/components/messagesrequesttoolunion.mdx | 6 + .../messagesshelltoolresultblock.mdx | 14 +++ .../messagesshelltoolresultblocktype.mdx | 15 +++ docs/operations/filter_.mdx | 1 + pyproject.toml | 2 +- src/openrouter/_version.py | 4 +- src/openrouter/components/__init__.py | 22 ++++ .../components/messagesbashtoolresultblock.py | 27 ++++ .../components/messagesmessageparam.py | 20 ++- src/openrouter/components/messagesrequest.py | 22 ++-- .../messagesshelltoolresultblock.py | 27 ++++ src/openrouter/operations/queryanalytics.py | 21 ++++ uv.lock | 2 +- 21 files changed, 390 insertions(+), 47 deletions(-) create mode 100644 docs/components/messagesbashtoolresultblock.mdx create mode 100644 docs/components/messagesbashtoolresultblocktype.mdx create mode 100644 docs/components/messagesshelltoolresultblock.mdx create mode 100644 docs/components/messagesshelltoolresultblocktype.mdx create mode 100644 src/openrouter/components/messagesbashtoolresultblock.py create mode 100644 src/openrouter/components/messagesshelltoolresultblock.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index caaa27bf..179620f4 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: eb2e16acfab5f2032a8d548745f59efb + docChecksum: de65a7aa9d84348d3d2803fd17763c50 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.28 - configChecksum: 008659dfab46a34671b25c5b61b0599c + releaseVersion: 1.1.29 + configChecksum: 69737fdbf335c1a4d255de632c8d2cd9 repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 96cb77ac-d2c5-495e-82f3-0b327ef45318 - pristine_commit_hash: f4a4961eea998d48535f499a9a4072361d6d5896 - pristine_tree_hash: 9515cf8c6e8d374d9de764f767b44af866d5b3bc + generation_id: c9c1d12d-ccde-4410-a7aa-afb0beff72b6 + pristine_commit_hash: 505412e05b4e22cde94361c99b5262f0b59d3e55 + pristine_tree_hash: e716081153f63fc31c2d0869205074537241ec06 features: python: acceptHeaders: 3.0.0 @@ -2812,6 +2812,14 @@ trackedFiles: id: 3a0dbdde87f0 last_write_checksum: sha1:157db05989f1ae8fe2c02064998a74cb55420fe6 pristine_git_object: e15e5c95e01572a3fc7d59ff16dc4bcc5d695447 + docs/components/messagesbashtoolresultblock.mdx: + id: da1ca4f7868f + last_write_checksum: sha1:d86505a856c17af875cfea2372c7e3ea9b6ae148 + pristine_git_object: 83608b14e277f5f17c73c2a57cee08066ecf5517 + docs/components/messagesbashtoolresultblocktype.mdx: + id: 8610a5472116 + last_write_checksum: sha1:8f04039e6ce081ab86230109b2c491222a68647b + pristine_git_object: 3d6b381bf96eec7bb9feed4e176ee1f13599f3ee docs/components/messagesfallbackparam.mdx: id: d7e026fed5f2 last_write_checksum: sha1:3f1e346696d37529787d1d9f85a1efc8e7162bea @@ -2834,8 +2842,8 @@ trackedFiles: pristine_git_object: aacfcabc1908dd56355bd5059c8d896a7f5266fd docs/components/messagesmessageparamcontentunion4.mdx: id: 0cbf68d37ca2 - last_write_checksum: sha1:c43a4df052ed1123f1387e2b5bb5f3488b5e06fd - pristine_git_object: c66c4422b760679b4a0e65ecb448b34000526dd5 + last_write_checksum: sha1:32faaaa1d630580926cc34e245fc27347b9f7c87 + pristine_git_object: 0a88c739648d2c889241f00c9c0b9449dd874292 docs/components/messagesmessageparamcontentunion5.mdx: id: 103a9b1bc479 last_write_checksum: sha1:8082efc20a4cb6d09750ac74b4db5a4f224d7032 @@ -2886,8 +2894,8 @@ trackedFiles: pristine_git_object: d432bb08eebe7bdedf35bbbc41bf3c215ce71057 docs/components/messagesrequesttoolunion.mdx: id: cb1be4df3cf7 - last_write_checksum: sha1:9fb279885d85302102998bd620d13484eb20a482 - pristine_git_object: 68bba52d48a267a933f6b0baec7f42cacf3305d5 + last_write_checksum: sha1:0ef88be729c7a50c272325132e38db25c1e6afe7 + pristine_git_object: 5fac516babc03cf57023521310fde1d9652b1d5a docs/components/messagessearchmodelsservertool.mdx: id: 1f9f5edef4fe last_write_checksum: sha1:5d3026e9fc2eda9ed7c5e8a08aff7f09514d666e @@ -2896,6 +2904,14 @@ trackedFiles: id: ecbd7f7f2e44 last_write_checksum: sha1:b0dc13c5cf05011f6496565a4553eb52b9d09481 pristine_git_object: 52ce907478e961eb90e709fca118e6d0631883d2 + docs/components/messagesshelltoolresultblock.mdx: + id: 0a41992a115c + last_write_checksum: sha1:d5e49fce544520f435e7493bc624a43e5c3979ef + pristine_git_object: 7b7b68f75ad30d01248a25387b4370ef74da954c + docs/components/messagesshelltoolresultblocktype.mdx: + id: 8b423fb3b1f7 + last_write_checksum: sha1:e8870b5a6c2a534856d6cee62b092c620b1c2821 + pristine_git_object: ccf32fe5f5786cdd793550c67a3aa0792edf559a docs/components/messagestooladditionblock.mdx: id: ee6e08ccc2ae last_write_checksum: sha1:b56dd3ae6d6e105c57162a705794a799ffd65533 @@ -6102,8 +6118,8 @@ trackedFiles: pristine_git_object: 2642f99d77ceb5007b1b863028d73c07e48dac67 docs/operations/filter_.mdx: id: 79b9c7c02d3b - last_write_checksum: sha1:4aa4ba9558d9bdfeef9b73fd78c3c14884c589e4 - pristine_git_object: 3397e42a132f1de350cf89bdf53c25299ae2d7bb + last_write_checksum: sha1:11626213ca5220d3013304af7d34d8b7c0c79f85 + pristine_git_object: 8a0c5f32ecc4219c55bde1911276b8636e5d9f42 docs/operations/getanalyticsmetadata.mdx: id: 7c66572b759d last_write_checksum: sha1:8ff4758a1a3b63116d55a83821dcb0c8012050f5 @@ -7086,8 +7102,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:3193870dc88ecc13b6062045a9c28446f2316b67 - pristine_git_object: c9429d0947678d321f59d0a94e4bd0e42b3b7d68 + last_write_checksum: sha1:cbfae3caa1f867c37e01f36c585aac069cc7f209 + pristine_git_object: 913be7fd10a47505aebc4f5e4c51d7e5fe3a3f52 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7114,8 +7130,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:476e03198fb60750f944e1c04354ccd2ab1e4d7c - pristine_git_object: aaaca5c82c36ebd4f3eb063dab83f9b3120267e0 + last_write_checksum: sha1:3e765bb384b287767a1f6e2676c46555e35559cf + pristine_git_object: 2ca97ab48e006508e18ec140c560862ec7dd250e src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:3ea0f1c73fb9c101b7bc5719da4dd7bf62ff469a @@ -7158,8 +7174,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:6c39e9051ff665be30ed2c1e7e7f64ed272a5622 - pristine_git_object: 2a8ad9e6785f77e990e9b1818d7d68eae15757ce + last_write_checksum: sha1:59723836087352ed0b816cdda561039510aec153 + pristine_git_object: afac4dacd65518f5dd79db7f3181888246a451b1 src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -8396,26 +8412,34 @@ trackedFiles: id: e36ad7b5263e last_write_checksum: sha1:805cd3ae136174638910d080aa5e98a3b192e928 pristine_git_object: 67ae6d5bdce0be9ac88b3f6295e8947962d9c9e2 + src/openrouter/components/messagesbashtoolresultblock.py: + id: 7f2f763d5dd7 + last_write_checksum: sha1:d869858b82b874e1d0ca538086632f916e94c8eb + pristine_git_object: edc95f4891f7d6a68fdf53c5c1741c0bc40ad18a src/openrouter/components/messagesfallbackparam.py: id: 53ba6717a4cc last_write_checksum: sha1:e1e75026fb625426f7cd1702cd3136dcf3ccaf79 pristine_git_object: 9026664fa77c678a7a5f2b317b511ad93445cff7 src/openrouter/components/messagesmessageparam.py: id: ed8bbab6720d - last_write_checksum: sha1:e24e57ae188645de8aa3ce815753ac3cb2e30d37 - pristine_git_object: 67bf044b3bd3c373bf4fa33131c511301f3bf056 + last_write_checksum: sha1:e2c29af9656da421ad301e55ee7164780126a673 + pristine_git_object: e7d23e1aeece83189a7bfff9f0381c494df2ffe6 src/openrouter/components/messagesoutputconfig.py: id: 54d1e297f740 last_write_checksum: sha1:478d9f534254d60225ac89bd21ddc49d18329297 pristine_git_object: 7e69d1f775baece5f94b03d35bcd884d5e6f519d src/openrouter/components/messagesrequest.py: id: 72b1f339024d - last_write_checksum: sha1:07a8582c3781e2adb8e5a897c8b4c5899b0acc39 - pristine_git_object: 112dcbe2a609222d42ae3cd50b29cae0c979d0fa + last_write_checksum: sha1:b315657f73e9f131207d75e3e5d4653b10e8fb79 + pristine_git_object: 6a458c9fc49c88bf033bc52b2a0cd98908438501 src/openrouter/components/messagessearchmodelsservertool.py: id: 53d755edb120 last_write_checksum: sha1:389786fc22ba4bb47b0a086b7aa321f2f04fe943 pristine_git_object: d101995fd27b0bccbac266805caba629039c5f93 + src/openrouter/components/messagesshelltoolresultblock.py: + id: a11af1c6ce03 + last_write_checksum: sha1:c923ef2afbecd6d45d8ce9cbee1e2948e810e323 + pristine_git_object: 9cb0636d2e99bb22e3c0fc26db51e8e9eca6f57b src/openrouter/components/messagestooladditionblock.py: id: 3fc00d28b82d last_write_checksum: sha1:9d58d3e11b4260f7d00efcf0630fe4186b5d01a1 @@ -10014,8 +10038,8 @@ trackedFiles: pristine_git_object: cbdad12f956c5f2a8252b7f6db102f1e83c4e85a src/openrouter/operations/queryanalytics.py: id: d76c63ff66f6 - last_write_checksum: sha1:97c08d2f87fce08adacd1cdccfbd72c34962b03f - pristine_git_object: a7e1247756af1bcf04e8ade0ac96744c9c2535c1 + last_write_checksum: sha1:8c04150e53c68a2a7b19217f478118d12b9e27d1 + pristine_git_object: aefd745e2d2c833b4d266ed767fd26bffc155880 src/openrouter/operations/sendchatcompletionrequest.py: id: d9fee71bb577 last_write_checksum: sha1:0cba4011b8e305270ac30f88cb7ab59b6aefe619 @@ -11905,3 +11929,4 @@ examples: "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} examplesVersion: 1.0.2 +releaseNotes: "## Python SDK Changes:\n* `open_router.beta.analytics.query_analytics()`: \n * `request.filters[].include_unset` **Added**\n* `open_router.presets.create_presets_messages()`: `request` **Changed**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index bcbc39f9..28be34e8 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.28 + version: 1.1.29 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 73f2f7a8..7942d802 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -12252,6 +12252,31 @@ components: - 'tool_use_id' - 'content' type: 'object' + MessagesBashToolResultBlock: + description: 'Output of a sandbox-executed `openrouter:bash` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block.' + example: + content: + command: 'ls' + exitCode: 0 + stderr: '' + stdout: "README.md\n" + tool_use_id: 'srvtoolu_01abc' + type: 'openrouter_bash_tool_result' + properties: + content: + additionalProperties: {} + type: 'object' + tool_use_id: + type: 'string' + type: + enum: + - 'openrouter_bash_tool_result' + type: 'string' + required: + - 'type' + - 'tool_use_id' + - 'content' + type: 'object' MessagesContentBlockDeltaEvent: description: 'Event sent when content is added to a content block' example: @@ -12385,6 +12410,8 @@ components: - $ref: '#/components/schemas/AnthropicContainerUpload' - $ref: '#/components/schemas/AnthropicCompactionBlock' - $ref: '#/components/schemas/AnthropicAdvisorToolResult' + - $ref: '#/components/schemas/ORAnthropicShellToolResult' + - $ref: '#/components/schemas/ORAnthropicBashToolResult' - properties: content: type: @@ -12761,6 +12788,8 @@ components: - $ref: '#/components/schemas/MessagesAdvisorToolResultBlock' - $ref: '#/components/schemas/MessagesToolAdditionBlock' - $ref: '#/components/schemas/MessagesToolRemovalBlock' + - $ref: '#/components/schemas/MessagesShellToolResultBlock' + - $ref: '#/components/schemas/MessagesBashToolResultBlock' type: 'array' role: enum: @@ -13289,6 +13318,7 @@ components: type: 'object' - $ref: '#/components/schemas/AnthropicToolSearchToolBm25' - $ref: '#/components/schemas/AnthropicToolSearchToolRegex' + - $ref: '#/components/schemas/ShellServerTool_OpenRouter' type: 'array' top_k: type: 'integer' @@ -13405,6 +13435,33 @@ components: required: - 'type' type: 'object' + MessagesShellToolResultBlock: + description: 'Output of an `openrouter:shell` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block.' + example: + content: + output: + - outcome: + exit_code: 0 + type: 'exit' + stderr: '' + stdout: "README.md\n" + tool_use_id: 'srvtoolu_01abc' + type: 'openrouter_shell_tool_result' + properties: + content: + additionalProperties: {} + type: 'object' + tool_use_id: + type: 'string' + type: + enum: + - 'openrouter_shell_tool_result' + type: 'string' + required: + - 'type' + - 'tool_use_id' + - 'content' + type: 'object' MessagesStartEvent: description: 'Event sent at the start of a streaming message' example: @@ -17289,6 +17346,31 @@ components: required: - 'type' type: 'object' + ORAnthropicBashToolResult: + description: 'Output of an `openrouter:bash` call executed in the OpenRouter sandbox (`engine: ''openrouter''`)' + example: + content: + command: 'ls' + exitCode: 0 + stderr: '' + stdout: "README.md\n" + tool_use_id: 'srvtoolu_01abc' + type: 'openrouter_bash_tool_result' + properties: + content: + additionalProperties: {} + type: 'object' + tool_use_id: + type: 'string' + type: + enum: + - 'openrouter_bash_tool_result' + type: 'string' + required: + - 'type' + - 'tool_use_id' + - 'content' + type: 'object' ORAnthropicContentBlock: discriminator: mapping: @@ -17297,6 +17379,8 @@ components: code_execution_tool_result: '#/components/schemas/AnthropicCodeExecutionToolResult' compaction: '#/components/schemas/AnthropicCompactionBlock' container_upload: '#/components/schemas/AnthropicContainerUpload' + openrouter_bash_tool_result: '#/components/schemas/ORAnthropicBashToolResult' + openrouter_shell_tool_result: '#/components/schemas/ORAnthropicShellToolResult' redacted_thinking: '#/components/schemas/AnthropicRedactedThinkingBlock' server_tool_use: '#/components/schemas/ORAnthropicServerToolUseBlock' text: '#/components/schemas/AnthropicTextBlock' @@ -17326,6 +17410,8 @@ components: - $ref: '#/components/schemas/AnthropicContainerUpload' - $ref: '#/components/schemas/AnthropicCompactionBlock' - $ref: '#/components/schemas/AnthropicAdvisorToolResult' + - $ref: '#/components/schemas/ORAnthropicShellToolResult' + - $ref: '#/components/schemas/ORAnthropicBashToolResult' ORAnthropicNullableCaller: discriminator: mapping: @@ -17365,6 +17451,33 @@ components: - 'id' - 'name' type: 'object' + ORAnthropicShellToolResult: + description: 'Output of an `openrouter:shell` call executed in the OpenRouter sandbox' + example: + content: + output: + - outcome: + exit_code: 0 + type: 'exit' + stderr: '' + stdout: "README.md\n" + tool_use_id: 'srvtoolu_01abc' + type: 'openrouter_shell_tool_result' + properties: + content: + additionalProperties: {} + type: 'object' + tool_use_id: + type: 'string' + type: + enum: + - 'openrouter_shell_tool_result' + type: 'string' + required: + - 'type' + - 'tool_use_id' + - 'content' + type: 'object' ORAnthropicStopReason: enum: - 'end_turn' @@ -25810,6 +25923,9 @@ paths: description: 'Dimension to filter on. Use the /meta endpoint for available dimensions.' example: 'model' type: 'string' + include_unset: + description: 'Include rows where the dimension has no value. Applies only to the `in` and `not_in` operators and dimensions that have an unset bucket.' + type: 'boolean' operator: description: 'Filter operator' example: 'eq' diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 9e9fd881..0a949ca2 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:4cac77c6135f24b52b5e30693a512a9723a7fe0d0dc6b12fd50aae2e4fdf127a - sourceBlobDigest: sha256:894a231d94956b7d96c0db56ba75097b4054aa04d322785cbb1a9d3a1639ffe8 + sourceRevisionDigest: sha256:dd29911e23a58bcd935d9c8aeeafbffc0cda31d9c79c2b2ca821b8fb61c3e0ee + sourceBlobDigest: sha256:0d2d3a0f42dedc35eb67a5c6359032ef42fe95a035426451c98cb4be96a2896f tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:4cac77c6135f24b52b5e30693a512a9723a7fe0d0dc6b12fd50aae2e4fdf127a - sourceBlobDigest: sha256:894a231d94956b7d96c0db56ba75097b4054aa04d322785cbb1a9d3a1639ffe8 + sourceRevisionDigest: sha256:dd29911e23a58bcd935d9c8aeeafbffc0cda31d9c79c2b2ca821b8fb61c3e0ee + sourceBlobDigest: sha256:0d2d3a0f42dedc35eb67a5c6359032ef42fe95a035426451c98cb4be96a2896f codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:62c9899981a9e2e8a5c6508343713b32a08ce639114f06238a2be712f04f1773 + codeSamplesRevisionDigest: sha256:c77943d0c16cbf6c66adbedd00b884b46030dfb072462fef82e9dd12bf0120da workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 1ea11541..ded7b729 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1069,4 +1069,14 @@ Based on: ### Generated - [python v1.1.28] . ### Releases -- [PyPI v1.1.28] https://pypi.org/project/openrouter/1.1.28 - . \ No newline at end of file +- [PyPI v1.1.28] https://pypi.org/project/openrouter/1.1.28 - . + +## 2026-08-04 21:05:01 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.29] . +### Releases +- [PyPI v1.1.29] https://pypi.org/project/openrouter/1.1.29 - . \ No newline at end of file diff --git a/docs/components/messagesbashtoolresultblock.mdx b/docs/components/messagesbashtoolresultblock.mdx new file mode 100644 index 00000000..83608b14 --- /dev/null +++ b/docs/components/messagesbashtoolresultblock.mdx @@ -0,0 +1,14 @@ +--- +title: "MessagesBashToolResultBlock" +--- + +Output of a sandbox-executed `openrouter:bash` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `content` | Dict[str, *Any*] | :heavy_check_mark: | N/A | +| `tool_use_id` | *str* | :heavy_check_mark: | N/A | +| `type` | [components.MessagesBashToolResultBlockType](../components/messagesbashtoolresultblocktype.mdx) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/messagesbashtoolresultblocktype.mdx b/docs/components/messagesbashtoolresultblocktype.mdx new file mode 100644 index 00000000..3d6b381b --- /dev/null +++ b/docs/components/messagesbashtoolresultblocktype.mdx @@ -0,0 +1,15 @@ +--- +title: "MessagesBashToolResultBlockType" +--- + +## Example Usage + +```python +from openrouter.components import MessagesBashToolResultBlockType +value: MessagesBashToolResultBlockType = "openrouter_bash_tool_result" +``` + + +## Values + +- `"openrouter_bash_tool_result"` diff --git a/docs/components/messagesmessageparamcontentunion4.mdx b/docs/components/messagesmessageparamcontentunion4.mdx index c66c4422..0a88c739 100644 --- a/docs/components/messagesmessageparamcontentunion4.mdx +++ b/docs/components/messagesmessageparamcontentunion4.mdx @@ -88,3 +88,15 @@ value: components.MessagesToolAdditionBlock = /* values here */ value: components.MessagesToolRemovalBlock = /* values here */ ``` +### `components.MessagesShellToolResultBlock` + +```python +value: components.MessagesShellToolResultBlock = /* values here */ +``` + +### `components.MessagesBashToolResultBlock` + +```python +value: components.MessagesBashToolResultBlock = /* values here */ +``` + diff --git a/docs/components/messagesrequesttoolunion.mdx b/docs/components/messagesrequesttoolunion.mdx index 68bba52d..5fac516b 100644 --- a/docs/components/messagesrequesttoolunion.mdx +++ b/docs/components/messagesrequesttoolunion.mdx @@ -94,3 +94,9 @@ value: components.AnthropicToolSearchToolBm25 = /* values here */ value: components.AnthropicToolSearchToolRegex = /* values here */ ``` +### `components.ShellServerToolOpenRouter` + +```python +value: components.ShellServerToolOpenRouter = /* values here */ +``` + diff --git a/docs/components/messagesshelltoolresultblock.mdx b/docs/components/messagesshelltoolresultblock.mdx new file mode 100644 index 00000000..7b7b68f7 --- /dev/null +++ b/docs/components/messagesshelltoolresultblock.mdx @@ -0,0 +1,14 @@ +--- +title: "MessagesShellToolResultBlock" +--- + +Output of an `openrouter:shell` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `content` | Dict[str, *Any*] | :heavy_check_mark: | N/A | +| `tool_use_id` | *str* | :heavy_check_mark: | N/A | +| `type` | [components.MessagesShellToolResultBlockType](../components/messagesshelltoolresultblocktype.mdx) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/messagesshelltoolresultblocktype.mdx b/docs/components/messagesshelltoolresultblocktype.mdx new file mode 100644 index 00000000..ccf32fe5 --- /dev/null +++ b/docs/components/messagesshelltoolresultblocktype.mdx @@ -0,0 +1,15 @@ +--- +title: "MessagesShellToolResultBlockType" +--- + +## Example Usage + +```python +from openrouter.components import MessagesShellToolResultBlockType +value: MessagesShellToolResultBlockType = "openrouter_shell_tool_result" +``` + + +## Values + +- `"openrouter_shell_tool_result"` diff --git a/docs/operations/filter_.mdx b/docs/operations/filter_.mdx index 3397e42a..8a0c5f32 100644 --- a/docs/operations/filter_.mdx +++ b/docs/operations/filter_.mdx @@ -7,5 +7,6 @@ title: "Filter" | Field | Type | Required | Description | Example | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `field` | *str* | :heavy_check_mark: | Dimension to filter on. Use the /meta endpoint for available dimensions. | model | +| `include_unset` | *Optional[bool]* | :heavy_minus_sign: | Include rows where the dimension has no value. Applies only to the `in` and `not_in` operators and dimensions that have an unset bucket. | | | `operator` | *str* | :heavy_check_mark: | Filter operator | eq | | `value` | [operations.Value1](../operations/value1.mdx) | :heavy_check_mark: | Filter value (scalar or array depending on operator). Several dimensions are enriched in responses (returned as human-readable labels), but filters must use the underlying ID: `api_key_id` — numeric ID (from generation metadata) or key hash (64-char hex from GET /api/v1/keys, resolved server-side); `user` — Clerk user ID (e.g. "user_abc123"), not the display name; `workspace` — workspace UUID, not the workspace name (filtering or grouping by the account default workspace also covers activity recorded before workspace resolution existed, which is attributed to that default workspace); `app` — numeric app ID, not the app title; `model` — permaslug (e.g. "openai/gpt-4o"), not the display name. Other dimensions (provider, origin, country, etc.) are not enriched and accept the value as returned. | | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index c9429d09..913be7fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.28" +version = "1.1.29" 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 aaaca5c8..2ca97ab4 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.28" +__version__: str = "1.1.29" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.28 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.29 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 2a8ad9e6..afac4dac 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -1529,6 +1529,11 @@ MessagesAdvisorToolResultBlockType, MessagesAdvisorToolResultBlockTypedDict, ) + from .messagesbashtoolresultblock import ( + MessagesBashToolResultBlock, + MessagesBashToolResultBlockType, + MessagesBashToolResultBlockTypedDict, + ) from .messagesfallbackparam import ( MessagesFallbackParam, MessagesFallbackParamTypedDict, @@ -1683,6 +1688,11 @@ MessagesSearchModelsServerToolType, MessagesSearchModelsServerToolTypedDict, ) + from .messagesshelltoolresultblock import ( + MessagesShellToolResultBlock, + MessagesShellToolResultBlockType, + MessagesShellToolResultBlockTypedDict, + ) from .messagestooladditionblock import ( MessagesToolAdditionBlock, MessagesToolAdditionBlockToolMcpToolReference, @@ -4131,6 +4141,9 @@ "MessagesAdvisorToolResultBlock", "MessagesAdvisorToolResultBlockType", "MessagesAdvisorToolResultBlockTypedDict", + "MessagesBashToolResultBlock", + "MessagesBashToolResultBlockType", + "MessagesBashToolResultBlockTypedDict", "MessagesFallbackParam", "MessagesFallbackParamTypedDict", "MessagesMessageParam", @@ -4167,6 +4180,9 @@ "MessagesSearchModelsServerTool", "MessagesSearchModelsServerToolType", "MessagesSearchModelsServerToolTypedDict", + "MessagesShellToolResultBlock", + "MessagesShellToolResultBlockType", + "MessagesShellToolResultBlockTypedDict", "MessagesToolAdditionBlock", "MessagesToolAdditionBlockToolMcpToolReference", "MessagesToolAdditionBlockToolMcpToolReferenceTypedDict", @@ -6337,6 +6353,9 @@ "MessagesAdvisorToolResultBlock": ".messagesadvisortoolresultblock", "MessagesAdvisorToolResultBlockType": ".messagesadvisortoolresultblock", "MessagesAdvisorToolResultBlockTypedDict": ".messagesadvisortoolresultblock", + "MessagesBashToolResultBlock": ".messagesbashtoolresultblock", + "MessagesBashToolResultBlockType": ".messagesbashtoolresultblock", + "MessagesBashToolResultBlockTypedDict": ".messagesbashtoolresultblock", "MessagesFallbackParam": ".messagesfallbackparam", "MessagesFallbackParamTypedDict": ".messagesfallbackparam", "ContentCompaction": ".messagesmessageparam", @@ -6481,6 +6500,9 @@ "MessagesSearchModelsServerTool": ".messagessearchmodelsservertool", "MessagesSearchModelsServerToolType": ".messagessearchmodelsservertool", "MessagesSearchModelsServerToolTypedDict": ".messagessearchmodelsservertool", + "MessagesShellToolResultBlock": ".messagesshelltoolresultblock", + "MessagesShellToolResultBlockType": ".messagesshelltoolresultblock", + "MessagesShellToolResultBlockTypedDict": ".messagesshelltoolresultblock", "MessagesToolAdditionBlock": ".messagestooladditionblock", "MessagesToolAdditionBlockToolMcpToolReference": ".messagestooladditionblock", "MessagesToolAdditionBlockToolMcpToolReferenceTypedDict": ".messagestooladditionblock", diff --git a/src/openrouter/components/messagesbashtoolresultblock.py b/src/openrouter/components/messagesbashtoolresultblock.py new file mode 100644 index 00000000..edc95f48 --- /dev/null +++ b/src/openrouter/components/messagesbashtoolresultblock.py @@ -0,0 +1,27 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from openrouter.types import BaseModel +from typing import Any, Dict, Literal +from typing_extensions import TypedDict + + +MessagesBashToolResultBlockType = Literal["openrouter_bash_tool_result",] + + +class MessagesBashToolResultBlockTypedDict(TypedDict): + r"""Output of a sandbox-executed `openrouter:bash` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block.""" + + content: Dict[str, Any] + tool_use_id: str + type: MessagesBashToolResultBlockType + + +class MessagesBashToolResultBlock(BaseModel): + r"""Output of a sandbox-executed `openrouter:bash` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block.""" + + content: Dict[str, Any] + + tool_use_id: str + + type: MessagesBashToolResultBlockType diff --git a/src/openrouter/components/messagesmessageparam.py b/src/openrouter/components/messagesmessageparam.py index 67bf044b..e7d23e1a 100644 --- a/src/openrouter/components/messagesmessageparam.py +++ b/src/openrouter/components/messagesmessageparam.py @@ -29,6 +29,14 @@ MessagesAdvisorToolResultBlock, MessagesAdvisorToolResultBlockTypedDict, ) +from .messagesbashtoolresultblock import ( + MessagesBashToolResultBlock, + MessagesBashToolResultBlockTypedDict, +) +from .messagesshelltoolresultblock import ( + MessagesShellToolResultBlock, + MessagesShellToolResultBlockTypedDict, +) from .messagestooladditionblock import ( MessagesToolAdditionBlock, MessagesToolAdditionBlockTypedDict, @@ -385,17 +393,19 @@ def serialize_model(self, handler): "MessagesMessageParamContentUnion4TypedDict", Union[ ContentRedactedThinkingTypedDict, + MessagesAdvisorToolResultBlockTypedDict, AnthropicImageBlockParamTypedDict, + MessagesBashToolResultBlockTypedDict, + MessagesShellToolResultBlockTypedDict, MessagesToolRemovalBlockTypedDict, - MessagesToolAdditionBlockTypedDict, ContentThinkingTypedDict, - MessagesAdvisorToolResultBlockTypedDict, + MessagesToolAdditionBlockTypedDict, + ContentWebSearchToolResultTypedDict, ContentCompactionTypedDict, AnthropicTextBlockParamTypedDict, - ContentWebSearchToolResultTypedDict, - ContentToolUseTypedDict, ContentServerToolUseTypedDict, ContentToolResultTypedDict, + ContentToolUseTypedDict, AnthropicSearchResultBlockParamTypedDict, AnthropicDocumentBlockParamTypedDict, ], @@ -418,6 +428,8 @@ def serialize_model(self, handler): Annotated[MessagesAdvisorToolResultBlock, Tag("advisor_tool_result")], Annotated[MessagesToolAdditionBlock, Tag("tool_addition")], Annotated[MessagesToolRemovalBlock, Tag("tool_removal")], + Annotated[MessagesShellToolResultBlock, Tag("openrouter_shell_tool_result")], + Annotated[MessagesBashToolResultBlock, Tag("openrouter_bash_tool_result")], ], Discriminator(lambda m: get_discriminator(m, "type", "type")), ] diff --git a/src/openrouter/components/messagesrequest.py b/src/openrouter/components/messagesrequest.py index 112dcbe2..6a458c9f 100644 --- a/src/openrouter/components/messagesrequest.py +++ b/src/openrouter/components/messagesrequest.py @@ -69,6 +69,10 @@ from .paretorouterplugin import ParetoRouterPlugin, ParetoRouterPluginTypedDict from .providerpreferences import ProviderPreferences, ProviderPreferencesTypedDict from .responsehealingplugin import ResponseHealingPlugin, ResponseHealingPluginTypedDict +from .shellservertool_openrouter import ( + ShellServerToolOpenRouter, + ShellServerToolOpenRouterTypedDict, +) from .stopservertoolswhencondition import ( StopServerToolsWhenCondition, StopServerToolsWhenConditionTypedDict, @@ -1049,13 +1053,14 @@ def serialize_model(self, handler): MessagesRequestToolUnionTypedDict = TypeAliasType( "MessagesRequestToolUnionTypedDict", Union[ - MessagesSearchModelsServerToolTypedDict, - DatetimeServerToolTypedDict, MessagesRequestToolTypedDict, + WebFetchServerToolTypedDict, + ShellServerToolOpenRouterTypedDict, OpenRouterWebSearchServerToolTypedDict, - ImageGenerationServerToolOpenRouterTypedDict, BashServerToolTypedDict, - WebFetchServerToolTypedDict, + DatetimeServerToolTypedDict, + ImageGenerationServerToolOpenRouterTypedDict, + MessagesSearchModelsServerToolTypedDict, ToolBash20250124TypedDict, ToolTextEditor20250124TypedDict, ToolCustomTypedDict, @@ -1071,13 +1076,14 @@ def serialize_model(self, handler): MessagesRequestToolUnion = TypeAliasType( "MessagesRequestToolUnion", Union[ - MessagesSearchModelsServerTool, - DatetimeServerTool, MessagesRequestTool, + WebFetchServerTool, + ShellServerToolOpenRouter, OpenRouterWebSearchServerTool, - ImageGenerationServerToolOpenRouter, BashServerTool, - WebFetchServerTool, + DatetimeServerTool, + ImageGenerationServerToolOpenRouter, + MessagesSearchModelsServerTool, ToolBash20250124, ToolTextEditor20250124, ToolCustom, diff --git a/src/openrouter/components/messagesshelltoolresultblock.py b/src/openrouter/components/messagesshelltoolresultblock.py new file mode 100644 index 00000000..9cb0636d --- /dev/null +++ b/src/openrouter/components/messagesshelltoolresultblock.py @@ -0,0 +1,27 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from openrouter.types import BaseModel +from typing import Any, Dict, Literal +from typing_extensions import TypedDict + + +MessagesShellToolResultBlockType = Literal["openrouter_shell_tool_result",] + + +class MessagesShellToolResultBlockTypedDict(TypedDict): + r"""Output of an `openrouter:shell` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block.""" + + content: Dict[str, Any] + tool_use_id: str + type: MessagesShellToolResultBlockType + + +class MessagesShellToolResultBlock(BaseModel): + r"""Output of an `openrouter:shell` call from a prior assistant turn. Accepted on replay and dropped before the provider request — Anthropic has no equivalent block.""" + + content: Dict[str, Any] + + tool_use_id: str + + type: MessagesShellToolResultBlockType diff --git a/src/openrouter/operations/queryanalytics.py b/src/openrouter/operations/queryanalytics.py index a7e12477..aefd745e 100644 --- a/src/openrouter/operations/queryanalytics.py +++ b/src/openrouter/operations/queryanalytics.py @@ -193,6 +193,8 @@ class FilterTypedDict(TypedDict): r"""Filter operator""" value: Value1TypedDict r"""Filter value (scalar or array depending on operator). Several dimensions are enriched in responses (returned as human-readable labels), but filters must use the underlying ID: `api_key_id` — numeric ID (from generation metadata) or key hash (64-char hex from GET /api/v1/keys, resolved server-side); `user` — Clerk user ID (e.g. \"user_abc123\"), not the display name; `workspace` — workspace UUID, not the workspace name (filtering or grouping by the account default workspace also covers activity recorded before workspace resolution existed, which is attributed to that default workspace); `app` — numeric app ID, not the app title; `model` — permaslug (e.g. \"openai/gpt-4o\"), not the display name. Other dimensions (provider, origin, country, etc.) are not enriched and accept the value as returned.""" + include_unset: NotRequired[bool] + r"""Include rows where the dimension has no value. Applies only to the `in` and `not_in` operators and dimensions that have an unset bucket.""" class Filter(BaseModel): @@ -205,6 +207,25 @@ class Filter(BaseModel): value: Value1 r"""Filter value (scalar or array depending on operator). Several dimensions are enriched in responses (returned as human-readable labels), but filters must use the underlying ID: `api_key_id` — numeric ID (from generation metadata) or key hash (64-char hex from GET /api/v1/keys, resolved server-side); `user` — Clerk user ID (e.g. \"user_abc123\"), not the display name; `workspace` — workspace UUID, not the workspace name (filtering or grouping by the account default workspace also covers activity recorded before workspace resolution existed, which is attributed to that default workspace); `app` — numeric app ID, not the app title; `model` — permaslug (e.g. \"openai/gpt-4o\"), not the display name. Other dimensions (provider, origin, country, etc.) are not enriched and accept the value as returned.""" + include_unset: Optional[bool] = None + r"""Include rows where the dimension has no value. Applies only to the `in` and `not_in` operators and dimensions that have an unset bucket.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["include_unset"]) + 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 + Direction = Union[ Literal[ diff --git a/uv.lock b/uv.lock index b2700aee..394485d8 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.28" +version = "1.1.29" source = { editable = "." } dependencies = [ { name = "httpcore" }, From 2d32ae03d2c8437a65aa59bffc66a432f89dd168 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 21:07:16 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow