diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 5abb7b0f..42ee5833 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: 7f61acc9f253327b431dd21c1a81a4c8 + docChecksum: 9fb12aaa50aac47d52de2be119794664 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.73 - configChecksum: 5d33524b8c1752f7dc142880a4ce0225 + releaseVersion: 1.1.74 + configChecksum: a61a95459185f7b05d7d7e2145aca63a repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 770d9b72-890a-4bd9-8dfd-897630f4a338 - pristine_commit_hash: 900541d2fb635af43bed09d5d9684c81b1102517 - pristine_tree_hash: 197d6c6c7fff87ce50bf863e6f6da5b9a281b8e5 + generation_id: 77268ed9-3648-48e6-b202-d01ffe5f50a7 + pristine_commit_hash: 605b3e3652e82e2bda19d3067379af1ae22902b2 + pristine_tree_hash: 9bcdabb4954b7400973ed08c699093481edfa53b features: python: acceptHeaders: 3.0.0 @@ -122,12 +122,12 @@ trackedFiles: pristine_git_object: 129b2fdfb6379bb7c755bc13f0d92da88bac1eaf docs/components/additionaltoolsitemtoolfunction.mdx: id: b8c1e4fcad3b - last_write_checksum: sha1:372d0aba8f1703b6a0d93905f2dbe4d068e50886 - pristine_git_object: 619939c0a51f1f4171680082ce7d5ec6b4a81225 + last_write_checksum: sha1:4344c64fb23b3a08f005d6c5297cfbc4260c2f1d + pristine_git_object: 763371ba80d45c9ac6e93ebc4994c31f99d86781 docs/components/additionaltoolsitemtoolunion.mdx: id: b3e8598b1887 - last_write_checksum: sha1:989ba14acb7cb2d5fb09fd46427781890a63aac8 - pristine_git_object: 137fc3f93d3e840ceb1bf0081a5ac9feaf098c1e + last_write_checksum: sha1:c20e105aabc3f29abd791bbd7ef68fac0797acb4 + pristine_git_object: e3a111fa7ce46da62cfe98deda6050b3e9abfabc docs/components/additionaltoolsitemtypefunction.mdx: id: bf179b4008af last_write_checksum: sha1:c0d4fee7d39fbd3d08c44bbe0e7b929350c5d7e8 @@ -2966,8 +2966,8 @@ trackedFiles: pristine_git_object: d432bb08eebe7bdedf35bbbc41bf3c215ce71057 docs/components/messagesrequesttoolunion.mdx: id: cb1be4df3cf7 - last_write_checksum: sha1:0ef88be729c7a50c272325132e38db25c1e6afe7 - pristine_git_object: 5fac516babc03cf57023521310fde1d9652b1d5a + last_write_checksum: sha1:83fc5d0c9de2a0dfa5402316069e43d06f9811d2 + pristine_git_object: 74985719c686cdc1d2274f40443aba0c1f33e7c2 docs/components/messagessearchmodelsservertool.mdx: id: 1f9f5edef4fe last_write_checksum: sha1:5d3026e9fc2eda9ed7c5e8a08aff7f09514d666e @@ -3622,8 +3622,8 @@ trackedFiles: pristine_git_object: 53ba3e6a9b38896d18e2aae4bf7c6f90e3e1fac9 docs/components/openresponsesresulttoolfunction.mdx: id: c9aad3ae216e - last_write_checksum: sha1:1d1e83e998d4b48b279b720886fe3c5b6e41992f - pristine_git_object: 9ccb4ab1cf60fe7e28fa73345c434569a9a9b661 + last_write_checksum: sha1:a2885c85349f9f7e6bc8e7cc9af557ea8263cd8e + pristine_git_object: 94432e2c075924507512ef964eec077cc97fb538 docs/components/openresponsesresulttoolunion.mdx: id: d43b7e93f04a last_write_checksum: sha1:631474df38328aa73dd3a511412cbf6b111e2686 @@ -4650,12 +4650,12 @@ trackedFiles: pristine_git_object: 61ea7fe276229819beff171a25ee0438233af94f docs/components/responsesrequesttoolfunction.mdx: id: dd0c817d15e6 - last_write_checksum: sha1:62c86a4a1d5536672f628e9ae66f4af3c33c7dd7 - pristine_git_object: 783bfa34989ba0d535cfd1126a68fd3601118639 + last_write_checksum: sha1:dfa933e6efc523a2f07e96f6a5ae9e48dcd180a5 + pristine_git_object: 19c144c13b8579663e9da47841244c7e0163a477 docs/components/responsesrequesttoolunion.mdx: id: 96bafa5d19b1 - last_write_checksum: sha1:c626fc897137022d93c3bc9a1053353ded2c42ef - pristine_git_object: e319e3ebeef4208dc3aac0cfcf29c7b32db52920 + last_write_checksum: sha1:da69027ea97d06a56a22e1a6746bb5768895e5f5 + pristine_git_object: e9024a4e9c6c343d7a04be37afbb959e73a943dc docs/components/responsesrequesttype.mdx: id: b2720876d384 last_write_checksum: sha1:9ed21e9f3c79e3936a4f6bc9df24eea499cc1e56 @@ -5172,6 +5172,18 @@ trackedFiles: id: b3ea2dbc7af5 last_write_checksum: sha1:b05a11b62179ab9242129b616c4ac4e24357807b pristine_git_object: e52e0f6a01c66838f7b55e4eef45e5612a2fb4e5 + docs/components/toolsearchservertool.mdx: + id: 827c342fe25b + last_write_checksum: sha1:62eee3897b26cfc2097be04aeb24dc578da877ec + pristine_git_object: 4882b510c4490161a4f046b47d18177ad87e60b6 + docs/components/toolsearchservertoolconfig.mdx: + id: 3a53a7a65bd2 + last_write_checksum: sha1:c789bbf182dd8d27b356a117a8fc65120b87c5a2 + pristine_git_object: f6ebf76349d4e4df6b643201d64fcd7668380fe0 + docs/components/toolsearchservertooltype.mdx: + id: 3c5a694766ac + last_write_checksum: sha1:9313b534b5d041472686f48ecc04422eff265ed0 + pristine_git_object: 34647574795a17ce650b9dd104e446cc1af79293 docs/components/tooltexteditor20250124.mdx: id: 58d2a6f35f9f last_write_checksum: sha1:c785aecfc38109c995d4d2f825de0f145d3f626a @@ -7254,8 +7266,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:596a34f32e3fe93c941603f44607714c631feeff - pristine_git_object: 7ec9ca7c5e6c7f7804dd5ce2ed706b52b3f942fc + last_write_checksum: sha1:c3437c95d22e45f3befad9d4bc702dee50f3049f + pristine_git_object: 5770dd83565f8791e800a993f6a53bc37474459a scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7282,8 +7294,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:f2a1b3a9993bc144f67c88d263e7f8f7b4ee748f - pristine_git_object: edb6ebdf6c6faf756a5909bffa446cfd9fa7be27 + last_write_checksum: sha1:2af0372a8794ec342f03e2eba4a878262eec658b + pristine_git_object: c24e3acab130d362ad77dbd34bab17cae0dc643a src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:1e0004d8d1d5d797e2b54cd1cabeb7f9489d08e9 @@ -7322,8 +7334,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:05cff6f5d99fb06205b7b457f8e965456c55c622 - pristine_git_object: 677e80a0eb88bf4aef80c84f8842e7ba9f1d88df + last_write_checksum: sha1:10eb5b4457c1df6ac3e5c5a6b7dd17219aef5bf7 + pristine_git_object: 668446597628e5005477ca7db4f3f709cf9d6d7a src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -7338,8 +7350,8 @@ trackedFiles: pristine_git_object: 1138e6f6bc025546a86877749ce83aca4c46499a src/openrouter/components/additionaltoolsitem.py: id: 2761ab789f41 - last_write_checksum: sha1:f711aac1f44184306bed8d816190208e8c73daa5 - pristine_git_object: c9851ef1cc4b9fadc8f0cb79089282ab0b0af941 + last_write_checksum: sha1:d75a4da1f483d9824f22b9b4e044fe16dac2f6d2 + pristine_git_object: a6fd0aabdb75e3d0d544ecacc2ecdbb8e42d720f src/openrouter/components/advisorreasoning.py: id: d5af5c19fc73 last_write_checksum: sha1:0fd32e4ff2d89f7cea861d6e691e82a7e1ff62f2 @@ -8618,8 +8630,8 @@ trackedFiles: pristine_git_object: 7e69d1f775baece5f94b03d35bcd884d5e6f519d src/openrouter/components/messagesrequest.py: id: 72b1f339024d - last_write_checksum: sha1:b315657f73e9f131207d75e3e5d4653b10e8fb79 - pristine_git_object: 6a458c9fc49c88bf033bc52b2a0cd98908438501 + last_write_checksum: sha1:760292062d2ff56aff19302d8a2094c793704d7c + pristine_git_object: 28b51a4be794559958948c0e64bf6761b41e8139 src/openrouter/components/messagessearchmodelsservertool.py: id: 53d755edb120 last_write_checksum: sha1:389786fc22ba4bb47b0a086b7aa321f2f04fe943 @@ -8846,8 +8858,8 @@ trackedFiles: pristine_git_object: 08d990d8cc07b7928158fc55784cd9d613f4c58b src/openrouter/components/openresponsesresult.py: id: 78f7e33b19e6 - last_write_checksum: sha1:35ed4f39bfe05c8d56e14166be09adc76b3fb0ec - pristine_git_object: f3be4e665351b3b08a77a2fa324ca88aad4ec4e9 + last_write_checksum: sha1:05c792b6b0f54a5707b83527f8d81a50523cc932 + pristine_git_object: 0c7d4a2b3338b97a21f3bf72966ecbc885f47008 src/openrouter/components/openrouterfile.py: id: df1961bcb130 last_write_checksum: sha1:1a9a1b1e640f4d0ef78ce0caa160b5ab342f02cc @@ -9282,8 +9294,8 @@ trackedFiles: pristine_git_object: 11b1a626ea17887a412878504cece777689f12eb src/openrouter/components/responsesrequest.py: id: 8c850080ec5d - last_write_checksum: sha1:cc946d7388766d9f64baedc3b1b63c432a52a416 - pristine_git_object: 6bec03bac66aae602f41b1d182c61d8431c5d8ea + last_write_checksum: sha1:ce1c8822e0686c8cd0ce3688cdb321633c7a4c20 + pristine_git_object: 69b4de8c822d20e3058fd3de34d5c0d5beda0b5a src/openrouter/components/responsesstreamingresponse.py: id: 142379f3bd90 last_write_checksum: sha1:a48d6f3610f5d15248ef4d25a0d88a0a4a1a9db7 @@ -9552,6 +9564,14 @@ trackedFiles: id: 9e2a14e87eac last_write_checksum: sha1:b969135c75e9671fbbb6bc7a325968acacec07c7 pristine_git_object: 4ad8b7e6ed164dbe62f17aabed7352319c8bbe26 + src/openrouter/components/toolsearchservertool.py: + id: 3aa6de41ca07 + last_write_checksum: sha1:21dc898a1519400cbfbda4aa35eda60a9dcbf668 + pristine_git_object: c196ed27fa8386e13f11fdb4ff065a4822717776 + src/openrouter/components/toolsearchservertoolconfig.py: + id: 4eff6a010e3a + last_write_checksum: sha1:fc3916e0d3f3e6367ee334ac6352e33fa61b020d + pristine_git_object: b11985ecd61d1f212c00dd8b0d95e466cd5283b4 src/openrouter/components/toomanyrequestsresponseerrordata.py: id: 4dc67ae011a1 last_write_checksum: sha1:d818b385d0725e729e5463b8d5f196d82b4340fe @@ -12179,6 +12199,4 @@ examples: "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} examplesVersion: 1.0.2 -releaseNotes: | - ## Python SDK Changes: - * `open_router.embeddings.generate()`: `error` **Changed** +releaseNotes: "## Python SDK Changes:\n* `open_router.presets.create_presets_responses()`: `request` **Changed** (Breaking ⚠️)\n* `open_router.responses.send()`: \n * `request` **Changed** (Breaking ⚠️)\n * `response` **Changed**\n* `open_router.beta.responses.send()`: \n * `request` **Changed** (Breaking ⚠️)\n * `response` **Changed**\n* `open_router.presets.create_presets_messages()`: \n * `request.tools[].union(ToolSearchServerTool)` **Added**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index ec760452..447ad8e4 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.73 + version: 1.1.74 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 96709c95..6e3c5977 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -191,7 +191,11 @@ components: anyOf: - allOf: - $ref: '#/components/schemas/FunctionTool' - - properties: {} + - properties: + defer_loading: + description: 'Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.' + example: true + type: 'boolean' type: 'object' description: 'Function tool definition' example: @@ -238,6 +242,7 @@ components: - $ref: '#/components/schemas/ApplyPatchServerTool_OpenRouter' - $ref: '#/components/schemas/BashServerTool' - $ref: '#/components/schemas/ShellServerTool_OpenRouter' + - $ref: '#/components/schemas/ToolSearchServerTool' - additionalProperties: {} properties: type: @@ -4030,7 +4035,11 @@ components: oneOf: - allOf: - $ref: '#/components/schemas/FunctionTool' - - properties: {} + - properties: + defer_loading: + description: 'Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.' + example: true + type: 'boolean' type: 'object' description: 'Function tool definition' example: @@ -13537,6 +13546,7 @@ components: - $ref: '#/components/schemas/AnthropicToolSearchToolBm25' - $ref: '#/components/schemas/AnthropicToolSearchToolRegex' - $ref: '#/components/schemas/ShellServerTool_OpenRouter' + - $ref: '#/components/schemas/ToolSearchServerTool' type: 'array' top_k: type: 'integer' @@ -22451,7 +22461,11 @@ components: anyOf: - allOf: - $ref: '#/components/schemas/FunctionTool' - - properties: {} + - properties: + defer_loading: + description: 'Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.' + example: true + type: 'boolean' type: 'object' description: 'Function tool definition' example: @@ -22498,6 +22512,7 @@ components: - $ref: '#/components/schemas/ApplyPatchServerTool_OpenRouter' - $ref: '#/components/schemas/BashServerTool' - $ref: '#/components/schemas/ShellServerTool_OpenRouter' + - $ref: '#/components/schemas/ToolSearchServerTool' type: 'array' top_k: type: 'integer' @@ -24329,6 +24344,32 @@ components: - 'mode' - 'tools' type: 'object' + ToolSearchServerTool: + description: 'OpenRouter built-in server tool: finds tools marked `defer_loading` and makes them callable' + example: + parameters: + max_results: 5 + type: 'openrouter:tool_search' + properties: + parameters: + $ref: '#/components/schemas/ToolSearchServerToolConfig' + type: + enum: + - 'openrouter:tool_search' + type: 'string' + required: + - 'type' + type: 'object' + ToolSearchServerToolConfig: + description: 'Configuration for the openrouter:tool_search server tool' + example: + max_results: 5 + properties: + max_results: + description: 'Maximum tools returned by one search. Defaults to 5.' + example: 5 + type: 'integer' + type: 'object' TooManyRequestsResponse: description: 'Too Many Requests - Rate limit exceeded' example: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 737c30aa..ee8884a9 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:54c62e0ede60b1ce928e151b71bc1a2b893f66f69d05cd8b69c9ab390108ed52 - sourceBlobDigest: sha256:73c180204faa8d058c5a26286e5584cce319a6ce6b2725e594998a7d2ff864f0 + sourceRevisionDigest: sha256:d938807249c4b04e2aa3e426d81beedfb2d8204bd8c5eddb9e144ee9c969c295 + sourceBlobDigest: sha256:1f896360285d829673d1a92c48e1ed7ad2382a0c8c59f823a11cf275e4861b1e tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:54c62e0ede60b1ce928e151b71bc1a2b893f66f69d05cd8b69c9ab390108ed52 - sourceBlobDigest: sha256:73c180204faa8d058c5a26286e5584cce319a6ce6b2725e594998a7d2ff864f0 + sourceRevisionDigest: sha256:d938807249c4b04e2aa3e426d81beedfb2d8204bd8c5eddb9e144ee9c969c295 + sourceBlobDigest: sha256:1f896360285d829673d1a92c48e1ed7ad2382a0c8c59f823a11cf275e4861b1e codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:2929d46dab7551ac4b7990bbd4f41554b468397b95311906b5f8ceef7b8e81c7 + codeSamplesRevisionDigest: sha256:1521a78c388b312f5f76799e2fc3ad010b754e359cdd3f401afd2ea52eea0f62 workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 3ce59b80..1cd05a1e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1519,4 +1519,14 @@ Based on: ### Generated - [python v1.1.73] . ### Releases -- [PyPI v1.1.73] https://pypi.org/project/openrouter/1.1.73 - . \ No newline at end of file +- [PyPI v1.1.73] https://pypi.org/project/openrouter/1.1.73 - . + +## 2026-08-22 05:06:38 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.74] . +### Releases +- [PyPI v1.1.74] https://pypi.org/project/openrouter/1.1.74 - . \ No newline at end of file diff --git a/docs/components/additionaltoolsitemtoolfunction.mdx b/docs/components/additionaltoolsitemtoolfunction.mdx index 619939c0..763371ba 100644 --- a/docs/components/additionaltoolsitemtoolfunction.mdx +++ b/docs/components/additionaltoolsitemtoolfunction.mdx @@ -7,10 +7,11 @@ Function tool definition ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | -| `name` | *str* | :heavy_check_mark: | N/A | -| `parameters` | Dict[str, *Any*] | :heavy_check_mark: | N/A | -| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | -| `type` | [components.AdditionalToolsItemTypeFunction](../components/additionaltoolsitemtypefunction.mdx) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | +| `name` | *str* | :heavy_check_mark: | N/A | | +| `parameters` | Dict[str, *Any*] | :heavy_check_mark: | N/A | | +| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | +| `type` | [components.AdditionalToolsItemTypeFunction](../components/additionaltoolsitemtypefunction.mdx) | :heavy_check_mark: | N/A | | +| `defer_loading` | *Optional[bool]* | :heavy_minus_sign: | Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred. | true | \ No newline at end of file diff --git a/docs/components/additionaltoolsitemtoolunion.mdx b/docs/components/additionaltoolsitemtoolunion.mdx index 137fc3f9..e3a111fa 100644 --- a/docs/components/additionaltoolsitemtoolunion.mdx +++ b/docs/components/additionaltoolsitemtoolunion.mdx @@ -166,6 +166,12 @@ value: components.BashServerTool = /* values here */ value: components.ShellServerToolOpenRouter = /* values here */ ``` +### `components.ToolSearchServerTool` + +```python +value: components.ToolSearchServerTool = /* values here */ +``` + ### `components.AdditionalToolsItemTool` ```python diff --git a/docs/components/messagesrequesttoolunion.mdx b/docs/components/messagesrequesttoolunion.mdx index 5fac516b..74985719 100644 --- a/docs/components/messagesrequesttoolunion.mdx +++ b/docs/components/messagesrequesttoolunion.mdx @@ -100,3 +100,9 @@ value: components.AnthropicToolSearchToolRegex = /* values here */ value: components.ShellServerToolOpenRouter = /* values here */ ``` +### `components.ToolSearchServerTool` + +```python +value: components.ToolSearchServerTool = /* values here */ +``` + diff --git a/docs/components/openresponsesresulttoolfunction.mdx b/docs/components/openresponsesresulttoolfunction.mdx index 9ccb4ab1..94432e2c 100644 --- a/docs/components/openresponsesresulttoolfunction.mdx +++ b/docs/components/openresponsesresulttoolfunction.mdx @@ -7,10 +7,11 @@ Function tool definition ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | -| `name` | *str* | :heavy_check_mark: | N/A | -| `parameters` | Dict[str, *Any*] | :heavy_check_mark: | N/A | -| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | -| `type` | [components.OpenResponsesResultType](../components/openresponsesresulttype.mdx) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | +| `name` | *str* | :heavy_check_mark: | N/A | | +| `parameters` | Dict[str, *Any*] | :heavy_check_mark: | N/A | | +| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | +| `type` | [components.OpenResponsesResultType](../components/openresponsesresulttype.mdx) | :heavy_check_mark: | N/A | | +| `defer_loading` | *Optional[bool]* | :heavy_minus_sign: | Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred. | true | \ No newline at end of file diff --git a/docs/components/responsesrequesttoolfunction.mdx b/docs/components/responsesrequesttoolfunction.mdx index 783bfa34..19c144c1 100644 --- a/docs/components/responsesrequesttoolfunction.mdx +++ b/docs/components/responsesrequesttoolfunction.mdx @@ -7,10 +7,11 @@ Function tool definition ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | -| `name` | *str* | :heavy_check_mark: | N/A | -| `parameters` | Dict[str, *Any*] | :heavy_check_mark: | N/A | -| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | -| `type` | [components.ResponsesRequestType](../components/responsesrequesttype.mdx) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | +| `name` | *str* | :heavy_check_mark: | N/A | | +| `parameters` | Dict[str, *Any*] | :heavy_check_mark: | N/A | | +| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | +| `type` | [components.ResponsesRequestType](../components/responsesrequesttype.mdx) | :heavy_check_mark: | N/A | | +| `defer_loading` | *Optional[bool]* | :heavy_minus_sign: | Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred. | true | \ No newline at end of file diff --git a/docs/components/responsesrequesttoolunion.mdx b/docs/components/responsesrequesttoolunion.mdx index e319e3eb..e9024a4e 100644 --- a/docs/components/responsesrequesttoolunion.mdx +++ b/docs/components/responsesrequesttoolunion.mdx @@ -166,3 +166,9 @@ value: components.BashServerTool = /* values here */ value: components.ShellServerToolOpenRouter = /* values here */ ``` +### `components.ToolSearchServerTool` + +```python +value: components.ToolSearchServerTool = /* values here */ +``` + diff --git a/docs/components/toolsearchservertool.mdx b/docs/components/toolsearchservertool.mdx new file mode 100644 index 00000000..4882b510 --- /dev/null +++ b/docs/components/toolsearchservertool.mdx @@ -0,0 +1,13 @@ +--- +title: "ToolSearchServerTool" +--- + +OpenRouter built-in server tool: finds tools marked `defer_loading` and makes them callable + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `parameters` | [Optional[components.ToolSearchServerToolConfig]](../components/toolsearchservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:tool_search server tool | \{
"max_results": 5
} | +| `type` | [components.ToolSearchServerToolType](../components/toolsearchservertooltype.mdx) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/components/toolsearchservertoolconfig.mdx b/docs/components/toolsearchservertoolconfig.mdx new file mode 100644 index 00000000..f6ebf763 --- /dev/null +++ b/docs/components/toolsearchservertoolconfig.mdx @@ -0,0 +1,12 @@ +--- +title: "ToolSearchServerToolConfig" +--- + +Configuration for the openrouter:tool_search server tool + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum tools returned by one search. Defaults to 5. | 5 | \ No newline at end of file diff --git a/docs/components/toolsearchservertooltype.mdx b/docs/components/toolsearchservertooltype.mdx new file mode 100644 index 00000000..34647574 --- /dev/null +++ b/docs/components/toolsearchservertooltype.mdx @@ -0,0 +1,15 @@ +--- +title: "ToolSearchServerToolType" +--- + +## Example Usage + +```python +from openrouter.components import ToolSearchServerToolType +value: ToolSearchServerToolType = "openrouter:tool_search" +``` + + +## Values + +- `"openrouter:tool_search"` diff --git a/pyproject.toml b/pyproject.toml index 7ec9ca7c..5770dd83 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.73" +version = "1.1.74" 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 edb6ebdf..c24e3aca 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.73" +__version__: str = "1.1.74" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.73 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.74 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 677e80a0..66844659 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -2884,6 +2884,15 @@ ToolChoiceAllowedType, ToolChoiceAllowedTypedDict, ) + from .toolsearchservertool import ( + ToolSearchServerTool, + ToolSearchServerToolType, + ToolSearchServerToolTypedDict, + ) + from .toolsearchservertoolconfig import ( + ToolSearchServerToolConfig, + ToolSearchServerToolConfigTypedDict, + ) from .toomanyrequestsresponseerrordata import ( TooManyRequestsResponseErrorData, TooManyRequestsResponseErrorDataTypedDict, @@ -5151,6 +5160,11 @@ "ToolChoiceTypedDict", "ToolCustom", "ToolCustomTypedDict", + "ToolSearchServerTool", + "ToolSearchServerToolConfig", + "ToolSearchServerToolConfigTypedDict", + "ToolSearchServerToolType", + "ToolSearchServerToolTypedDict", "ToolTextEditor20250124", "ToolTextEditor20250124TypedDict", "ToolTypeCustom", @@ -7499,6 +7513,11 @@ "ToolChoiceAllowed": ".toolchoiceallowed", "ToolChoiceAllowedType": ".toolchoiceallowed", "ToolChoiceAllowedTypedDict": ".toolchoiceallowed", + "ToolSearchServerTool": ".toolsearchservertool", + "ToolSearchServerToolType": ".toolsearchservertool", + "ToolSearchServerToolTypedDict": ".toolsearchservertool", + "ToolSearchServerToolConfig": ".toolsearchservertoolconfig", + "ToolSearchServerToolConfigTypedDict": ".toolsearchservertoolconfig", "TooManyRequestsResponseErrorData": ".toomanyrequestsresponseerrordata", "TooManyRequestsResponseErrorDataTypedDict": ".toomanyrequestsresponseerrordata", "TopProviderInfo": ".topproviderinfo", diff --git a/src/openrouter/components/additionaltoolsitem.py b/src/openrouter/components/additionaltoolsitem.py index c9851ef1..a6fd0aab 100644 --- a/src/openrouter/components/additionaltoolsitem.py +++ b/src/openrouter/components/additionaltoolsitem.py @@ -60,6 +60,7 @@ SubagentServerToolOpenRouter, SubagentServerToolOpenRouterTypedDict, ) +from .toolsearchservertool import ToolSearchServerTool, ToolSearchServerToolTypedDict from .webfetchservertool import WebFetchServerTool, WebFetchServerToolTypedDict from .websearchservertool import WebSearchServerTool, WebSearchServerToolTypedDict from .websearchservertool_openrouter import ( @@ -76,7 +77,7 @@ ) import pydantic from pydantic import ConfigDict, model_serializer -from typing import Any, Dict, List, Literal, Union +from typing import Any, Dict, List, Literal, Optional, Union from typing_extensions import NotRequired, TypeAliasType, TypedDict @@ -127,6 +128,8 @@ class AdditionalToolsItemToolFunctionTypedDict(TypedDict): type: AdditionalToolsItemTypeFunction description: NotRequired[Nullable[str]] strict: NotRequired[Nullable[bool]] + defer_loading: NotRequired[bool] + r"""Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.""" class AdditionalToolsItemToolFunction(BaseModel): @@ -142,9 +145,12 @@ class AdditionalToolsItemToolFunction(BaseModel): strict: OptionalNullable[bool] = UNSET + defer_loading: Optional[bool] = None + r"""Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["description", "strict"]) + optional_fields = set(["description", "strict", "defer_loading"]) nullable_fields = set(["description", "parameters", "strict"]) serialized = handler(self) m = {} @@ -177,25 +183,26 @@ def serialize_model(self, handler): SearchModelsServerToolOpenRouterTypedDict, WebFetchServerToolTypedDict, AdditionalToolsItemToolTypedDict, - ShellServerToolOpenRouterTypedDict, + ToolSearchServerToolTypedDict, CodeInterpreterServerToolTypedDict, + ShellServerToolOpenRouterTypedDict, BashServerToolTypedDict, ApplyPatchServerToolOpenRouterTypedDict, WebSearchServerToolOpenRouterTypedDict, ImageGenerationServerToolOpenRouterTypedDict, FusionServerToolOpenRouterTypedDict, FilesServerToolTypedDict, - DatetimeServerToolTypedDict, AdvisorServerToolOpenRouterTypedDict, SubagentServerToolOpenRouterTypedDict, + DatetimeServerToolTypedDict, NamespaceToolTypedDict, CustomToolTypedDict, ComputerUseServerToolTypedDict, - AdditionalToolsItemToolFunctionTypedDict, FileSearchServerToolTypedDict, + AdditionalToolsItemToolFunctionTypedDict, PreviewWebSearchServerToolTypedDict, - Preview20250311WebSearchServerToolTypedDict, WebSearchServerToolTypedDict, + Preview20250311WebSearchServerToolTypedDict, LegacyWebSearchServerToolTypedDict, McpServerToolTypedDict, ImageGenerationServerToolTypedDict, @@ -212,25 +219,26 @@ def serialize_model(self, handler): SearchModelsServerToolOpenRouter, WebFetchServerTool, AdditionalToolsItemTool, - ShellServerToolOpenRouter, + ToolSearchServerTool, CodeInterpreterServerTool, + ShellServerToolOpenRouter, BashServerTool, ApplyPatchServerToolOpenRouter, WebSearchServerToolOpenRouter, ImageGenerationServerToolOpenRouter, FusionServerToolOpenRouter, FilesServerTool, - DatetimeServerTool, AdvisorServerToolOpenRouter, SubagentServerToolOpenRouter, + DatetimeServerTool, NamespaceTool, CustomTool, ComputerUseServerTool, - AdditionalToolsItemToolFunction, FileSearchServerTool, + AdditionalToolsItemToolFunction, PreviewWebSearchServerTool, - Preview20250311WebSearchServerTool, WebSearchServerTool, + Preview20250311WebSearchServerTool, LegacyWebSearchServerTool, McpServerTool, ImageGenerationServerTool, diff --git a/src/openrouter/components/messagesrequest.py b/src/openrouter/components/messagesrequest.py index 6a458c9f..28b51a4b 100644 --- a/src/openrouter/components/messagesrequest.py +++ b/src/openrouter/components/messagesrequest.py @@ -77,6 +77,7 @@ StopServerToolsWhenCondition, StopServerToolsWhenConditionTypedDict, ) +from .toolsearchservertool import ToolSearchServerTool, ToolSearchServerToolTypedDict from .traceconfig import TraceConfig, TraceConfigTypedDict from .webfetchplugin import WebFetchPlugin, WebFetchPluginTypedDict from .webfetchservertool import WebFetchServerTool, WebFetchServerToolTypedDict @@ -1054,17 +1055,18 @@ def serialize_model(self, handler): "MessagesRequestToolUnionTypedDict", Union[ MessagesRequestToolTypedDict, - WebFetchServerToolTypedDict, - ShellServerToolOpenRouterTypedDict, OpenRouterWebSearchServerToolTypedDict, + ToolSearchServerToolTypedDict, + ShellServerToolOpenRouterTypedDict, + WebFetchServerToolTypedDict, BashServerToolTypedDict, DatetimeServerToolTypedDict, - ImageGenerationServerToolOpenRouterTypedDict, MessagesSearchModelsServerToolTypedDict, - ToolBash20250124TypedDict, + ImageGenerationServerToolOpenRouterTypedDict, ToolTextEditor20250124TypedDict, - ToolCustomTypedDict, + ToolBash20250124TypedDict, AnthropicToolSearchToolBm25TypedDict, + ToolCustomTypedDict, AnthropicToolSearchToolRegexTypedDict, ToolWebSearch20250305TypedDict, ToolAdvisor20260301TypedDict, @@ -1077,17 +1079,18 @@ def serialize_model(self, handler): "MessagesRequestToolUnion", Union[ MessagesRequestTool, - WebFetchServerTool, - ShellServerToolOpenRouter, OpenRouterWebSearchServerTool, + ToolSearchServerTool, + ShellServerToolOpenRouter, + WebFetchServerTool, BashServerTool, DatetimeServerTool, - ImageGenerationServerToolOpenRouter, MessagesSearchModelsServerTool, - ToolBash20250124, + ImageGenerationServerToolOpenRouter, ToolTextEditor20250124, - ToolCustom, + ToolBash20250124, AnthropicToolSearchToolBm25, + ToolCustom, AnthropicToolSearchToolRegex, ToolWebSearch20250305, ToolAdvisor20260301, diff --git a/src/openrouter/components/openresponsesresult.py b/src/openrouter/components/openresponsesresult.py index f3be4e66..0c7d4a2b 100644 --- a/src/openrouter/components/openresponsesresult.py +++ b/src/openrouter/components/openresponsesresult.py @@ -76,6 +76,8 @@ class OpenResponsesResultToolFunctionTypedDict(TypedDict): type: OpenResponsesResultType description: NotRequired[Nullable[str]] strict: NotRequired[Nullable[bool]] + defer_loading: NotRequired[bool] + r"""Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.""" class OpenResponsesResultToolFunction(BaseModel): @@ -91,9 +93,12 @@ class OpenResponsesResultToolFunction(BaseModel): strict: OptionalNullable[bool] = UNSET + defer_loading: Optional[bool] = None + r"""Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["description", "strict"]) + optional_fields = set(["description", "strict", "defer_loading"]) nullable_fields = set(["description", "parameters", "strict"]) serialized = handler(self) m = {} @@ -127,8 +132,8 @@ def serialize_model(self, handler): NamespaceToolTypedDict, CustomToolTypedDict, ComputerUseServerToolTypedDict, - OpenResponsesResultToolFunctionTypedDict, FileSearchServerToolTypedDict, + OpenResponsesResultToolFunctionTypedDict, LegacyWebSearchServerToolTypedDict, WebSearchServerToolTypedDict, Preview20250311WebSearchServerToolTypedDict, diff --git a/src/openrouter/components/responsesrequest.py b/src/openrouter/components/responsesrequest.py index 6bec03ba..69b4de8c 100644 --- a/src/openrouter/components/responsesrequest.py +++ b/src/openrouter/components/responsesrequest.py @@ -97,6 +97,7 @@ SubagentServerToolOpenRouterTypedDict, ) from .textextendedconfig import TextExtendedConfig, TextExtendedConfigTypedDict +from .toolsearchservertool import ToolSearchServerTool, ToolSearchServerToolTypedDict from .traceconfig import TraceConfig, TraceConfigTypedDict from .webfetchplugin import WebFetchPlugin, WebFetchPluginTypedDict from .webfetchservertool import WebFetchServerTool, WebFetchServerToolTypedDict @@ -237,6 +238,8 @@ class ResponsesRequestToolFunctionTypedDict(TypedDict): type: ResponsesRequestType description: NotRequired[Nullable[str]] strict: NotRequired[Nullable[bool]] + defer_loading: NotRequired[bool] + r"""Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.""" class ResponsesRequestToolFunction(BaseModel): @@ -252,9 +255,12 @@ class ResponsesRequestToolFunction(BaseModel): strict: OptionalNullable[bool] = UNSET + defer_loading: Optional[bool] = None + r"""Withhold this tool from the model until `openrouter:tool_search` finds it. Requires the tool search server tool; at least one tool must remain non-deferred.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["description", "strict"]) + optional_fields = set(["description", "strict", "defer_loading"]) nullable_fields = set(["description", "parameters", "strict"]) serialized = handler(self) m = {} @@ -284,27 +290,28 @@ def serialize_model(self, handler): CodexLocalShellToolTypedDict, ApplyPatchServerToolTypedDict, ShellServerToolTypedDict, - FilesServerToolTypedDict, - SubagentServerToolOpenRouterTypedDict, + SearchModelsServerToolOpenRouterTypedDict, + WebFetchServerToolTypedDict, + ToolSearchServerToolTypedDict, ShellServerToolOpenRouterTypedDict, - BashServerToolTypedDict, CodeInterpreterServerToolTypedDict, + BashServerToolTypedDict, ApplyPatchServerToolOpenRouterTypedDict, WebSearchServerToolOpenRouterTypedDict, - WebFetchServerToolTypedDict, - SearchModelsServerToolOpenRouterTypedDict, ImageGenerationServerToolOpenRouterTypedDict, FusionServerToolOpenRouterTypedDict, + FilesServerToolTypedDict, DatetimeServerToolTypedDict, AdvisorServerToolOpenRouterTypedDict, + SubagentServerToolOpenRouterTypedDict, NamespaceToolTypedDict, CustomToolTypedDict, ComputerUseServerToolTypedDict, - ResponsesRequestToolFunctionTypedDict, FileSearchServerToolTypedDict, - WebSearchServerToolTypedDict, + ResponsesRequestToolFunctionTypedDict, PreviewWebSearchServerToolTypedDict, Preview20250311WebSearchServerToolTypedDict, + WebSearchServerToolTypedDict, LegacyWebSearchServerToolTypedDict, McpServerToolTypedDict, ImageGenerationServerToolTypedDict, @@ -348,6 +355,7 @@ def serialize_model(self, handler): Annotated[ApplyPatchServerToolOpenRouter, Tag("openrouter:apply_patch")], Annotated[BashServerTool, Tag("openrouter:bash")], Annotated[ShellServerToolOpenRouter, Tag("openrouter:shell")], + Annotated[ToolSearchServerTool, Tag("openrouter:tool_search")], ], Discriminator(lambda m: get_discriminator(m, "type", "type")), ] diff --git a/src/openrouter/components/toolsearchservertool.py b/src/openrouter/components/toolsearchservertool.py new file mode 100644 index 00000000..c196ed27 --- /dev/null +++ b/src/openrouter/components/toolsearchservertool.py @@ -0,0 +1,47 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .toolsearchservertoolconfig import ( + ToolSearchServerToolConfig, + ToolSearchServerToolConfigTypedDict, +) +from openrouter.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Literal, Optional +from typing_extensions import NotRequired, TypedDict + + +ToolSearchServerToolType = Literal["openrouter:tool_search",] + + +class ToolSearchServerToolTypedDict(TypedDict): + r"""OpenRouter built-in server tool: finds tools marked `defer_loading` and makes them callable""" + + type: ToolSearchServerToolType + parameters: NotRequired[ToolSearchServerToolConfigTypedDict] + r"""Configuration for the openrouter:tool_search server tool""" + + +class ToolSearchServerTool(BaseModel): + r"""OpenRouter built-in server tool: finds tools marked `defer_loading` and makes them callable""" + + type: ToolSearchServerToolType + + parameters: Optional[ToolSearchServerToolConfig] = None + r"""Configuration for the openrouter:tool_search server tool""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["parameters"]) + 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/src/openrouter/components/toolsearchservertoolconfig.py b/src/openrouter/components/toolsearchservertoolconfig.py new file mode 100644 index 00000000..b11985ec --- /dev/null +++ b/src/openrouter/components/toolsearchservertoolconfig.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from openrouter.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class ToolSearchServerToolConfigTypedDict(TypedDict): + r"""Configuration for the openrouter:tool_search server tool""" + + max_results: NotRequired[int] + r"""Maximum tools returned by one search. Defaults to 5.""" + + +class ToolSearchServerToolConfig(BaseModel): + r"""Configuration for the openrouter:tool_search server tool""" + + max_results: Optional[int] = None + r"""Maximum tools returned by one search. Defaults to 5.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["max_results"]) + 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 220ea3ff..1104693d 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.73" +version = "1.1.74" source = { editable = "." } dependencies = [ { name = "httpcore" },