From 27e5e91a9676cab32306153886936f5113d94268 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 28 Aug 2026 02:53:40 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `open_router.endpoints.list_zdr_endpoints()`: `response.data[].supports_tool_choice` **Added** * `open_router.endpoints.list()`: `response.data.endpoints[].supports_tool_choice` **Added** --- .speakeasy/gen.lock | 48 ++++++++++++------- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 34 +++++++++++++ .speakeasy/workflow.lock | 10 ++-- RELEASES.md | 12 ++++- docs/components/publicendpoint.mdx | 1 + docs/components/toolchoicesupport.mdx | 15 ++++++ pyproject.toml | 2 +- src/openrouter/_version.py | 4 +- src/openrouter/components/__init__.py | 5 ++ src/openrouter/components/publicendpoint.py | 6 +++ .../components/toolchoicesupport.py | 34 +++++++++++++ uv.lock | 2 +- 13 files changed, 146 insertions(+), 29 deletions(-) create mode 100644 docs/components/toolchoicesupport.mdx create mode 100644 src/openrouter/components/toolchoicesupport.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index be1bfeab..f5b80d35 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: 8c4d4967819782de637ac877bf680bb4 + docChecksum: 49cab31e26e4f51cca85c9189dd52233 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.99 - configChecksum: 1934b1366779d2fd11e23ef757079a67 + releaseVersion: 1.1.100 + configChecksum: afd476ac9e62663f18d8926666a3f9ce repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: f79644c8-8faa-4aac-9971-da3177741570 - pristine_commit_hash: 4b94f324af3cc637aabc2d65eed38ad86cbfe0ce - pristine_tree_hash: c24fd5861a7734f941a68257c1a5e1752ac371ac + generation_id: 1e71a3e4-0580-4769-a022-dc9d7d47323b + pristine_commit_hash: a24464569a16d2b504febca7df87f23df1fc7118 + pristine_tree_hash: 744b8c7893729f867d09b9a4a12ea539d75f794a features: python: acceptHeaders: 3.0.0 @@ -4426,8 +4426,8 @@ trackedFiles: pristine_git_object: 5aa8e90a6761d61aa63204bc3aa73f4481449d3e docs/components/publicendpoint.mdx: id: ec4843ef5d86 - last_write_checksum: sha1:e8078801c9a7135d9f841ac1fffe44e7eabc53be - pristine_git_object: 4201c433326975294dc8b896356859f93bd48368 + last_write_checksum: sha1:cc81fa2e66c0f573baccacd6459fa6291cab6e06 + pristine_git_object: 9b1b04fa64839f8a7ef14593d9dd4080003257f1 docs/components/publicpricing.mdx: id: 61fb18b7ff94 last_write_checksum: sha1:e241420249fcbd1bf515b0f5e84934de0b207948 @@ -5240,6 +5240,10 @@ trackedFiles: id: a65f80fb91da last_write_checksum: sha1:561f5d9c0cf863b470e54961fb76a80dd96268a6 pristine_git_object: a042d8988f10a8cc18359547049853a409ad116b + docs/components/toolchoicesupport.mdx: + id: 341c02a7f9af + last_write_checksum: sha1:7536da2d154a06add9ee3c8a9ec908cec117f0f9 + pristine_git_object: 9b95b3df7efa855e4757420f028fa5491851c525 docs/components/toolchoicetool.mdx: id: 909ad21233d2 last_write_checksum: sha1:1d54c7dc7ebecdc917f17ec7a49c60e66b2c7bde @@ -7394,8 +7398,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:8a1ac5ce02efb21b0be26eb68cfa84e3b3dcc49b - pristine_git_object: cb27695fa28b45f4f7b4ccbabbb2522440bde938 + last_write_checksum: sha1:e19c450ae5c7d4034841798a72d47cf2c20c2d67 + pristine_git_object: 694759bb6af031de308de67fdf6322f0192bb9b0 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7422,8 +7426,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:46e9c850f3080f65041bc77aed50f4d962e185dd - pristine_git_object: 5a7265f202b696bc58b9d6089e8889b3d2758d4c + last_write_checksum: sha1:f8dc837367e182bc774e0e8b885b1d87c9cee422 + pristine_git_object: e80760efad905fb006fc95e91a48f3c85911c072 src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:1e0004d8d1d5d797e2b54cd1cabeb7f9489d08e9 @@ -7462,8 +7466,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:f4c4bb5c830aba7e295ae9be7f4e28b8ae53e47b - pristine_git_object: 61b6c37c4e475bd7a390cd0f701dbe9efb397ca8 + last_write_checksum: sha1:0a10488fc9dde745709dec391b0f28fe33dc272a + pristine_git_object: ea03eda8ae0697b247dbed86d0e512287e55a61f src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -9302,8 +9306,8 @@ trackedFiles: pristine_git_object: 1798ae9dd8c2e4b629bb99cc5c643827895e8231 src/openrouter/components/publicendpoint.py: id: 848aa2ef9129 - last_write_checksum: sha1:314bfa0b6229f9e45f59a0c5a832c8ace8612a52 - pristine_git_object: 403d1434866e32a04dca2c793e70914d924d5ca3 + last_write_checksum: sha1:6ca6cfb03234dfd54a121e7b2d5a1fc371e09ea7 + pristine_git_object: 182e3034b8dd4fb9308382fc6ed7eafdc3400abb src/openrouter/components/publicpricing.py: id: 96d115d83cc5 last_write_checksum: sha1:fd8c320ac83b282eaf2405045329b55076d4311a @@ -9704,6 +9708,10 @@ trackedFiles: id: 9e2a14e87eac last_write_checksum: sha1:b969135c75e9671fbbb6bc7a325968acacec07c7 pristine_git_object: 4ad8b7e6ed164dbe62f17aabed7352319c8bbe26 + src/openrouter/components/toolchoicesupport.py: + id: a46dc874f6c8 + last_write_checksum: sha1:b7d04d0b4d2ed2c052007e4d00e7857a9f70f5c7 + pristine_git_object: 0042e076baa780911493aad1ed66975fc321045b src/openrouter/components/toolsearchservertool.py: id: 3aa6de41ca07 last_write_checksum: sha1:21dc898a1519400cbfbda4aa35eda60a9dcbf668 @@ -10870,7 +10878,7 @@ examples: slug: "gpt-4" responses: "200": - application/json: {"data": {"architecture": {"input_modalities": ["text"], "instruct_type": "chatml", "modality": "text->text", "output_modalities": ["text"], "tokenizer": "GPT"}, "created": 1692901234, "description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.", "endpoints": [{"context_length": 8192, "latency_last_30m": {"p50": 0.25, "p75": 0.35, "p90": 0.48, "p99": 0.85}, "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "model_id": "openai/gpt-4", "model_name": "GPT-4", "name": "OpenAI: GPT-4", "pricing": {"completion": "0.00006", "prompt": "0.00003"}, "provider_name": "OpenAI", "quantization": "fp16", "supported_parameters": ["temperature", "top_p", "max_tokens"], "supports_implicit_caching": true, "supports_voice_cloning": false, "tag": "openai", "throughput_last_30m": {"p50": 45.2, "p75": 38.5, "p90": 28.3, "p99": 15.1}, "uptime_last_1d": 99.8, "uptime_last_30m": 99.5, "uptime_last_5m": 100}], "id": "openai/gpt-4", "name": "GPT-4"}} + application/json: {"data": {"architecture": {"input_modalities": ["text"], "instruct_type": "chatml", "modality": "text->text", "output_modalities": ["text"], "tokenizer": "GPT"}, "created": 1692901234, "description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.", "endpoints": [{"context_length": 8192, "latency_last_30m": {"p50": 0.25, "p75": 0.35, "p90": 0.48, "p99": 0.85}, "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "model_id": "openai/gpt-4", "model_name": "GPT-4", "name": "OpenAI: GPT-4", "pricing": {"completion": "0.00006", "prompt": "0.00003"}, "provider_name": "OpenAI", "quantization": "fp16", "supported_parameters": ["temperature", "top_p", "max_tokens"], "supports_implicit_caching": true, "supports_tool_choice": {"auto": true, "function": true, "none": true, "required": true}, "supports_voice_cloning": false, "tag": "openai", "throughput_last_30m": {"p50": 45.2, "p75": 38.5, "p90": 28.3, "p99": 15.1}, "uptime_last_1d": 99.8, "uptime_last_30m": 99.5, "uptime_last_5m": 100}], "id": "openai/gpt-4", "name": "GPT-4"}} "404": application/json: {"error": {"code": 404, "message": "Resource not found"}} "500": @@ -10881,7 +10889,7 @@ examples: speakeasy-default-list-endpoints-zdr: responses: "200": - application/json: {"data": [{"context_length": 8192, "latency_last_30m": {"p50": 0.25, "p75": 0.35, "p90": 0.48, "p99": 0.85}, "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "model_id": "openai/gpt-4", "model_name": "GPT-4", "name": "OpenAI: GPT-4", "pricing": {"completion": "0.00006", "prompt": "0.00003"}, "provider_name": "OpenAI", "quantization": "fp16", "supported_parameters": ["temperature", "top_p", "max_tokens"], "supports_implicit_caching": true, "supports_voice_cloning": false, "tag": "openai", "throughput_last_30m": {"p50": 45.2, "p75": 38.5, "p90": 28.3, "p99": 15.1}, "uptime_last_1d": 99.8, "uptime_last_30m": 99.5, "uptime_last_5m": 100}]} + application/json: {"data": [{"context_length": 8192, "latency_last_30m": {"p50": 0.25, "p75": 0.35, "p90": 0.48, "p99": 0.85}, "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "model_id": "openai/gpt-4", "model_name": "GPT-4", "name": "OpenAI: GPT-4", "pricing": {"completion": "0.00006", "prompt": "0.00003"}, "provider_name": "OpenAI", "quantization": "fp16", "supported_parameters": ["temperature", "top_p", "max_tokens"], "supports_implicit_caching": true, "supports_tool_choice": {"auto": true, "function": true, "none": true, "required": true}, "supports_voice_cloning": false, "tag": "openai", "throughput_last_30m": {"p50": 45.2, "p75": 38.5, "p90": 28.3, "p99": 15.1}, "uptime_last_1d": 99.8, "uptime_last_30m": 99.5, "uptime_last_5m": 100}]} "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} "403": @@ -12465,3 +12473,7 @@ examples: "503": application/json: {"error": {"code": 503, "message": "Service temporarily unavailable"}} examplesVersion: 1.0.2 +releaseNotes: | + ## Python SDK Changes: + * `open_router.endpoints.list_zdr_endpoints()`: `response.data[].supports_tool_choice` **Added** + * `open_router.endpoints.list()`: `response.data.endpoints[].supports_tool_choice` **Added** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 23d61698..7fba3e96 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.99 + version: 1.1.100 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 7ac009b2..eb6e99d5 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -21776,6 +21776,11 @@ components: - 'top_p' - 'max_tokens' supports_implicit_caching: true + supports_tool_choice: + auto: true + function: true + none: true + required: true supports_voice_cloning: false tag: 'openai' throughput_last_30m: @@ -21879,6 +21884,8 @@ components: type: 'array' supports_implicit_caching: type: 'boolean' + supports_tool_choice: + $ref: '#/components/schemas/ToolChoiceSupport' supports_voice_cloning: default: false description: 'Whether this TTS endpoint accepts inline reference audio (`input_references`) for stateless voice cloning. Requests carrying reference audio are only routed to endpoints where this is true.' @@ -21918,6 +21925,7 @@ components: - 'max_completion_tokens' - 'max_prompt_tokens' - 'supported_parameters' + - 'supports_tool_choice' - 'uptime_last_30m' - 'uptime_last_5m' - 'uptime_last_1d' @@ -24746,6 +24754,32 @@ components: - 'mode' - 'tools' type: 'object' + ToolChoiceSupport: + description: 'Per-variant `tool_choice` support. `tool_choice` in `supported_parameters` only says the parameter is accepted; these flags say which of its values passed testing.' + example: + auto: true + function: true + none: true + required: true + properties: + auto: + description: 'Whether the endpoint supports `"tool_choice": "auto"`.' + type: 'boolean' + function: + description: 'Whether the endpoint supports naming a function, `"tool_choice": {"type": "function", ...}`.' + type: 'boolean' + none: + description: 'Whether the endpoint supports `"tool_choice": "none"`.' + type: 'boolean' + required: + description: 'Whether the endpoint supports `"tool_choice": "required"`.' + type: 'boolean' + required: + - 'none' + - 'auto' + - 'required' + - 'function' + type: 'object' ToolSearchServerTool: description: 'OpenRouter built-in server tool: finds tools marked `defer_loading` and makes them callable' example: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 9dadf463..e4170764 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:05fdf5ad1168fb8b389b6e43c0923738bc18c6ad94e238e8841d494b6feeae1e - sourceBlobDigest: sha256:b311b2470a0d14077e5043ac92fe525a1530aad37faae4926f19fc0a1479264a + sourceRevisionDigest: sha256:6f26d62515e38e30f35bbfa3088b73c38437c2afaf74034523ee3d8355b0e40b + sourceBlobDigest: sha256:5c89c614a3ba5e6cd16300ef4c493d457466e033825b05d1b6d2c46f6654d592 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:05fdf5ad1168fb8b389b6e43c0923738bc18c6ad94e238e8841d494b6feeae1e - sourceBlobDigest: sha256:b311b2470a0d14077e5043ac92fe525a1530aad37faae4926f19fc0a1479264a + sourceRevisionDigest: sha256:6f26d62515e38e30f35bbfa3088b73c38437c2afaf74034523ee3d8355b0e40b + sourceBlobDigest: sha256:5c89c614a3ba5e6cd16300ef4c493d457466e033825b05d1b6d2c46f6654d592 codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:7cb22388bca22a387a7fd7f5e256223d7cd0376ff37e6e535c3b06b7e90f5380 + codeSamplesRevisionDigest: sha256:702310cb5d40b4bfe4eb33c467144bd478c63996e9830744a04cec44e742f5dc workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 9045a0d5..17755372 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1779,4 +1779,14 @@ Based on: ### Generated - [python v1.1.99] . ### Releases -- [PyPI v1.1.99] https://pypi.org/project/openrouter/1.1.99 - . \ No newline at end of file +- [PyPI v1.1.99] https://pypi.org/project/openrouter/1.1.99 - . + +## 2026-08-28 02:51:27 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.100] . +### Releases +- [PyPI v1.1.100] https://pypi.org/project/openrouter/1.1.100 - . \ No newline at end of file diff --git a/docs/components/publicendpoint.mdx b/docs/components/publicendpoint.mdx index 4201c433..9b1b04fa 100644 --- a/docs/components/publicendpoint.mdx +++ b/docs/components/publicendpoint.mdx @@ -22,6 +22,7 @@ Information about a specific model endpoint | `status` | [Optional[components.EndpointStatus]](../components/endpointstatus.mdx) | :heavy_minus_sign: | N/A | 0 | | `supported_parameters` | List[[components.Parameter](../components/parameter.mdx)] | :heavy_check_mark: | N/A | | | `supports_implicit_caching` | *bool* | :heavy_check_mark: | N/A | | +| `supports_tool_choice` | [components.ToolChoiceSupport](../components/toolchoicesupport.mdx) | :heavy_check_mark: | Per-variant `tool_choice` support. `tool_choice` in `supported_parameters` only says the parameter is accepted; these flags say which of its values passed testing. | \{
"auto": true,
"function": true,
"none": true,
"required": true
} | | `supports_voice_cloning` | *Optional[bool]* | :heavy_minus_sign: | Whether this TTS endpoint accepts inline reference audio (`input_references`) for stateless voice cloning. Requests carrying reference audio are only routed to endpoints where this is true. | | | `tag` | *str* | :heavy_check_mark: | N/A | | | `throughput_last_30m` | [Nullable[components.PercentileStats]](../components/percentilestats.mdx) | :heavy_check_mark: | N/A | \{
"p50": 25.5,
"p75": 35.2,
"p90": 48.7,
"p99": 85.3
} | diff --git a/docs/components/toolchoicesupport.mdx b/docs/components/toolchoicesupport.mdx new file mode 100644 index 00000000..9b95b3df --- /dev/null +++ b/docs/components/toolchoicesupport.mdx @@ -0,0 +1,15 @@ +--- +title: "ToolChoiceSupport" +--- + +Per-variant `tool_choice` support. `tool_choice` in `supported_parameters` only says the parameter is accepted; these flags say which of its values passed testing. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `auto` | *bool* | :heavy_check_mark: | Whether the endpoint supports `"tool_choice": "auto"`. | +| `function` | *bool* | :heavy_check_mark: | Whether the endpoint supports naming a function, `"tool_choice": {"type": "function", ...}`. | +| `none` | *bool* | :heavy_check_mark: | Whether the endpoint supports `"tool_choice": "none"`. | +| `required` | *bool* | :heavy_check_mark: | Whether the endpoint supports `"tool_choice": "required"`. | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index cb27695f..694759bb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.99" +version = "1.1.100" 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 5a7265f2..e80760ef 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.99" +__version__: str = "1.1.100" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.99 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.100 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 61b6c37c..ea03eda8 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -2923,6 +2923,7 @@ ToolChoiceAllowedType, ToolChoiceAllowedTypedDict, ) + from .toolchoicesupport import ToolChoiceSupport, ToolChoiceSupportTypedDict from .toolsearchservertool import ( ToolSearchServerTool, ToolSearchServerToolType, @@ -5224,6 +5225,8 @@ "ToolChoiceAutoTypedDict", "ToolChoiceNone", "ToolChoiceNoneTypedDict", + "ToolChoiceSupport", + "ToolChoiceSupportTypedDict", "ToolChoiceTool", "ToolChoiceToolTypedDict", "ToolChoiceTypeAuto", @@ -7620,6 +7623,8 @@ "ToolChoiceAllowed": ".toolchoiceallowed", "ToolChoiceAllowedType": ".toolchoiceallowed", "ToolChoiceAllowedTypedDict": ".toolchoiceallowed", + "ToolChoiceSupport": ".toolchoicesupport", + "ToolChoiceSupportTypedDict": ".toolchoicesupport", "ToolSearchServerTool": ".toolsearchservertool", "ToolSearchServerToolType": ".toolsearchservertool", "ToolSearchServerToolTypedDict": ".toolsearchservertool", diff --git a/src/openrouter/components/publicendpoint.py b/src/openrouter/components/publicendpoint.py index 403d1434..182e3034 100644 --- a/src/openrouter/components/publicendpoint.py +++ b/src/openrouter/components/publicendpoint.py @@ -7,6 +7,7 @@ from .pricingoverride import PricingOverride, PricingOverrideTypedDict from .providername import ProviderName from .quantization import Quantization +from .toolchoicesupport import ToolChoiceSupport, ToolChoiceSupportTypedDict from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL from pydantic import model_serializer from typing import List, Optional @@ -149,6 +150,8 @@ class PublicEndpointTypedDict(TypedDict): quantization: Nullable[Quantization] supported_parameters: List[Parameter] supports_implicit_caching: bool + supports_tool_choice: ToolChoiceSupportTypedDict + r"""Per-variant `tool_choice` support. `tool_choice` in `supported_parameters` only says the parameter is accepted; these flags say which of its values passed testing.""" tag: str throughput_last_30m: Nullable[PercentileStatsTypedDict] uptime_last_1d: Nullable[float] @@ -191,6 +194,9 @@ class PublicEndpoint(BaseModel): supports_implicit_caching: bool + supports_tool_choice: ToolChoiceSupport + r"""Per-variant `tool_choice` support. `tool_choice` in `supported_parameters` only says the parameter is accepted; these flags say which of its values passed testing.""" + tag: str throughput_last_30m: Nullable[PercentileStats] diff --git a/src/openrouter/components/toolchoicesupport.py b/src/openrouter/components/toolchoicesupport.py new file mode 100644 index 00000000..0042e076 --- /dev/null +++ b/src/openrouter/components/toolchoicesupport.py @@ -0,0 +1,34 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from openrouter.types import BaseModel +from typing_extensions import TypedDict + + +class ToolChoiceSupportTypedDict(TypedDict): + r"""Per-variant `tool_choice` support. `tool_choice` in `supported_parameters` only says the parameter is accepted; these flags say which of its values passed testing.""" + + auto: bool + r"""Whether the endpoint supports `\"tool_choice\": \"auto\"`.""" + function: bool + r"""Whether the endpoint supports naming a function, `\"tool_choice\": {\"type\": \"function\", ...}`.""" + none: bool + r"""Whether the endpoint supports `\"tool_choice\": \"none\"`.""" + required: bool + r"""Whether the endpoint supports `\"tool_choice\": \"required\"`.""" + + +class ToolChoiceSupport(BaseModel): + r"""Per-variant `tool_choice` support. `tool_choice` in `supported_parameters` only says the parameter is accepted; these flags say which of its values passed testing.""" + + auto: bool + r"""Whether the endpoint supports `\"tool_choice\": \"auto\"`.""" + + function: bool + r"""Whether the endpoint supports naming a function, `\"tool_choice\": {\"type\": \"function\", ...}`.""" + + none: bool + r"""Whether the endpoint supports `\"tool_choice\": \"none\"`.""" + + required: bool + r"""Whether the endpoint supports `\"tool_choice\": \"required\"`.""" diff --git a/uv.lock b/uv.lock index a2b12ab5..7caabda7 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.99" +version = "1.1.100" source = { editable = "." } dependencies = [ { name = "httpcore" }, From f8a817f288cd8f23a80bb4cb963bd1cec05baa1b Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Fri, 28 Aug 2026 02:53:47 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow