diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 62ff1ed62..86db60b2c 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: 5079eb00ca1eb970dce6128009b273f3 + docChecksum: 391e357ac47938ae90fb7ff4e0655266 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.3.72 - configChecksum: f694de07da25d85e9c11f82d0da9ebb1 + releaseVersion: 1.3.73 + configChecksum: c5ff2d4796113096907206c7b9a46d4d repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: ca012085-b807-4a32-a8a8-eb55fa87fab8 - pristine_commit_hash: 652242151c5b6f4c3dc2e34094c689d7c597c83b - pristine_tree_hash: efdfda9840130060732935490643c1c027b0fea5 + generation_id: c273b2f0-c648-43f2-be40-19fdc9034d09 + pristine_commit_hash: 7a5479dd501a6ddd669e52ed1871bd4ae6593d59 + pristine_tree_hash: 0ec6d64749a5220d249d9cfdd2def366fd55e8d4 features: python: acceptHeaders: 3.0.0 @@ -1724,8 +1724,8 @@ trackedFiles: pristine_git_object: a00676abb210aeb3747aa6d6a0dfbe3e3ad42f76 docs/components/byokproviderslug.mdx: id: 6ea70819f6d8 - last_write_checksum: sha1:0047976f8856a3ede87d3493e696c0593b715ca1 - pristine_git_object: 5b1b92ee45ab0cb582189f6883926fa238393ff4 + last_write_checksum: sha1:319780ed215f586ccc1f06a8883aa0dac3cdd7ca + pristine_git_object: 5ad5ae6527b06c9e3d0630e2a062d85a1402037f docs/components/capabilitydescriptor.mdx: id: 34ac0e581d79 last_write_checksum: sha1:62ee9ccab6cec4572383cef654997ab4106d4676 @@ -2600,8 +2600,8 @@ trackedFiles: pristine_git_object: c31f263d23205ebfa16eb7e4ae5f33a11fb19764 docs/components/createprivateendpointrequest.mdx: id: 14dbb5bba6c1 - last_write_checksum: sha1:383b1208492f41531e7b5b74bbe5d8fa6e728246 - pristine_git_object: 6c0147e3adf05e7caf81c42f677ebcc69951ad07 + last_write_checksum: sha1:ddea9a5d58465fbfb47a927c848a11b359673187 + pristine_git_object: e9a0f79d968084059dcea0599f73de594800b089 docs/components/createprivateendpointrequestdeclaredregion.mdx: id: 58cea9c8b74d last_write_checksum: sha1:7b835ef8af060b80af19bbbb1eae9ec24eabf747 @@ -3604,8 +3604,8 @@ trackedFiles: pristine_git_object: 11f1471c8b6c04f52af89d74d6dec2e9d12c2d82 docs/components/imagegenerationproviderpreferencesoptions.mdx: id: 32d5c4b3e06b - last_write_checksum: sha1:8e5bdcdecddcc2a5b652b88e8c7c7887a8787c89 - pristine_git_object: 90a02df2aacfc5d7e322333e4f89dfdf59faba1a + last_write_checksum: sha1:0f7c5c7b04bdec80ac8049b7ca803f8afcf6dd16 + pristine_git_object: 3826b9dfb2cc549bbe1752b7cac5334f87bae1e5 docs/components/imagegenerationproviderpreferencesorder.mdx: id: 0547877073f3 last_write_checksum: sha1:3e890c691097373cc9a2d7e47c3594f56b57809c @@ -6316,8 +6316,8 @@ trackedFiles: pristine_git_object: 6a99a2737d18a3c227bf7fcabf58b481d3c7d94b docs/components/privateendpoint.mdx: id: 139c5b16dd66 - last_write_checksum: sha1:0b78a7ad4a5508cd530d6b121d5b171d56b00d8d - pristine_git_object: 89ec31591eb14ddf3e17ba0ff01dd1079314832a + last_write_checksum: sha1:9a7d6ec85eba27f801982e6d6c1312856c58e539 + pristine_git_object: c877a16f69c1952f0e3a5e0f4e55217ffe5ebed9 docs/components/privateendpointactivation.mdx: id: c5cea1d4e39d last_write_checksum: sha1:832ee01779e755b70618c0fb80ac937ba70b15cb @@ -6336,12 +6336,12 @@ trackedFiles: pristine_git_object: d82f235f03d49c49a8051659a00a64753630d9b8 docs/components/privateendpointpricing.mdx: id: 16264ba816a0 - last_write_checksum: sha1:437150761f58fdec4106968311845cb1c59da33a - pristine_git_object: 15a8329bc1c3462e0fe11c21be108b3bb7a91b3b + last_write_checksum: sha1:18134f67a96280dbf944223036f9f473221eb342 + pristine_git_object: 3004d03302ab6b06f44c41c8fad4eead79aac399 docs/components/privateendpointresponse.mdx: id: 5844d85b61d8 - last_write_checksum: sha1:4393e19b080374b66726b448399f9465ed2d2028 - pristine_git_object: ebc7588e01d90f525cd143acf20968af466f9cbe + last_write_checksum: sha1:e303f61ad992a12c3f9e1008beba2b3b277c9157 + pristine_git_object: 7d641919aded35cecc7b9ca046af4af368b2be0d docs/components/privateendpointstatus.mdx: id: 170564aaaa0f last_write_checksum: sha1:3cdf3d3142af4ece802933887e1659bca0ea26be @@ -6396,12 +6396,12 @@ trackedFiles: pristine_git_object: e4103b29b85cafaf653bf8f71bd8e12278a16fa8 docs/components/providername.mdx: id: aa3a4904b228 - last_write_checksum: sha1:3f95c98dc224726e833a2a18e22852f497dea373 - pristine_git_object: fd35d33a28b43d601181a689df1a77b1d4ca4cd8 + last_write_checksum: sha1:e2a84dbc4284448764b55b2ed907ea0a48a09bd5 + pristine_git_object: 6dc6d4c77b976166b211575dd17345b8d8a68008 docs/components/provideroptions.mdx: id: 2697807524fe - last_write_checksum: sha1:8e9f66fcc428c0ee40189ac533ad2cc5117b43b7 - pristine_git_object: ab51902b4acda8d89ac2e454e15bf4005fb5ad9c + last_write_checksum: sha1:17aca86741539c2a9a89c0e7c5ecb2d3d2c528c7 + pristine_git_object: a9cc73b56bc4ce4231b0230e2846b1c83090e54e docs/components/provideroverloadedresponseerrordata.mdx: id: dc500cd14889 last_write_checksum: sha1:8326118941c8899a398931c8c7871af21b716b00 @@ -6432,8 +6432,8 @@ trackedFiles: pristine_git_object: dd376f0952fa0517dd83b06ed7afc2c856123dbc docs/components/providerresponseprovidername.mdx: id: 2fc17b61e546 - last_write_checksum: sha1:37d89625d75fcc06f931a14b52421ab46f5eaebc - pristine_git_object: 0ebaa1032d87ed5999d6f61c47b97ac1bd9957f1 + last_write_checksum: sha1:38a91e5f91b41427c2893be3291e267e279c89cd + pristine_git_object: 3675176b9ee5e8fae22de06637b6c5db03801991 docs/components/providersort.mdx: id: d73fa13eeb95 last_write_checksum: sha1:b7e9e6842741e3433d705bd576f2ac5383f00134 @@ -7904,8 +7904,8 @@ trackedFiles: pristine_git_object: d46fb370c21fa0d04b29ece85364a693737dfe79 docs/components/updateprivateendpointpricingrequest.mdx: id: 1ed6ca2fbacb - last_write_checksum: sha1:5fd60dc4e75d09ceb512ab85008836d78969983c - pristine_git_object: 96fbfd32997780ac55660c2f202da78d780676dc + last_write_checksum: sha1:328f4f68996672e5a5b31ada9b80cae99233348a + pristine_git_object: a757848b1ec13e2ac94ff49d0754d422962cf7c9 docs/components/updateprivateendpointrequest.mdx: id: 8a1aa4763af9 last_write_checksum: sha1:a7e5f59788d831200451567601a9ad91959edbb5 @@ -8048,8 +8048,8 @@ trackedFiles: pristine_git_object: 67f56887bb4758559189e3e9e6123dff9a38df81 docs/components/videogenerationrequestoptions.mdx: id: 1d67160e7e7a - last_write_checksum: sha1:3d53daa52396eb195e4e7dccd2271d20f828dbc9 - pristine_git_object: bda3194c1e15e444262fc9f4484f24800a502586 + last_write_checksum: sha1:76b1e402149e4bfb2a9424874df6368650de06de + pristine_git_object: 8fc76e5da7205a35d72ff5ea7f47f3fa719ffdbf docs/components/videogenerationrequestprovider.mdx: id: d6424dd5de9d last_write_checksum: sha1:72aa46a3335220b579db56574ea179d150dbe2b6 @@ -9916,8 +9916,8 @@ trackedFiles: pristine_git_object: 0f0b54e43577a8a835cd971f82e48c3921e3d88e docs/operations/provider.mdx: id: c75b3bbeeaa0 - last_write_checksum: sha1:6c73a0fe64424258b8260f1f2d5aee64f37c895f - pristine_git_object: ee07ed6dc04b71765eb494c4807f22971350d285 + last_write_checksum: sha1:ce3f3fa5d69d80a788a934d48fcaa6bbb17260ed + pristine_git_object: 0a8cad96cd904712da6f4e77f5889cf32203f8c3 docs/operations/provisioninternglobals.mdx: id: 5e34eb9c579a last_write_checksum: sha1:e5ddc9680dd8f7c0bbec6bb900f0754c8d8da955 @@ -10348,8 +10348,8 @@ trackedFiles: pristine_git_object: 28d3f17d25e50a97e4c195ea46a15ee6ab431902 docs/sdks/privateendpoints/README.mdx: id: 54dee70b8cc7 - last_write_checksum: sha1:3ee195b23b8124d351823bb7ef8fb956ef281c3c - pristine_git_object: a0cd92faace314f7f90e259eb6926517c7e78335 + last_write_checksum: sha1:2f58390d196d1c08a304b9d3c2f495281fe0c8db + pristine_git_object: 8996a61b1f8f3270f905963de0dee573427b4d86 docs/sdks/providers/README.mdx: id: 5ea9af111324 last_write_checksum: sha1:570b55655ee7602d3807c3218e450741f634eed6 @@ -10400,8 +10400,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:b12bd325c9d171cffb89638fe400fec91337f464 - pristine_git_object: 93cb885778a1728106f84669753cfecd37002996 + last_write_checksum: sha1:601a53e7a7df73c85ee31b075aed86e5a9e8e4a3 + pristine_git_object: be6cea480dd5fc0c1260fa0fca6ad9f991a2b413 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -10428,8 +10428,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:731a83cb71c84efb1628f7fdc686e220673b8e0b - pristine_git_object: a966ba4b6e32b2639d42909101205276a1fe9574 + last_write_checksum: sha1:07efa5800140346aac74f5b66d5f7a6aa2f78b6b + pristine_git_object: 3a87fcf4b0d22084670a1b08654a1ce936fedcbb src/openrouter/alpha.py: id: 306c4d93308d last_write_checksum: sha1:30f55a360f41376ab194b9ea725fe4e001a5ae1a @@ -11208,8 +11208,8 @@ trackedFiles: pristine_git_object: 1b3f14e8e93ced25f87ee3ca73c01e2f32f42988 src/openrouter/components/byokproviderslug.py: id: 6738a8516caf - last_write_checksum: sha1:fa105c6ada88a04de912f585282997ea69c3a9d7 - pristine_git_object: 66f4760c7f12258d679ecfad73cc320d601c41ad + last_write_checksum: sha1:4286355bb7991b1bb3187266e20473fea8c9e3ff + pristine_git_object: 495fe846d7295d6f89ab82fc99be2ea3afd003e1 src/openrouter/components/capabilitydescriptor.py: id: 368790a86f10 last_write_checksum: sha1:a167551924ee82b4b5876a0ab698a45fe8c87a95 @@ -12048,8 +12048,8 @@ trackedFiles: pristine_git_object: 6b9a8990973466285f9b49b366bbc5fc1ae42e41 src/openrouter/components/imagegenerationproviderpreferences.py: id: 100a82a54e2d - last_write_checksum: sha1:d6eb77c7c2c7eab46d9b445f77e551505fec758c - pristine_git_object: 30efd67803874ac0d6f7f77d6e8567e4073ed2bc + last_write_checksum: sha1:5ee96d059fa96f28780ba7c95d52e99f20536e3a + pristine_git_object: 791eb94001bb3fb6789db1744bddddafea8353cf src/openrouter/components/imagegenerationrequest.py: id: f8291a7be9a0 last_write_checksum: sha1:5594779ac114f113c508b0eb75ad355a50a3d76e @@ -13080,8 +13080,8 @@ trackedFiles: pristine_git_object: 6a8d44a0b8ed4313318a9ebc0220de6b098cd01a src/openrouter/components/privateendpointpricing.py: id: 2d8979e18f5b - last_write_checksum: sha1:7542707a55468cf3356b599d5455637981e41b73 - pristine_git_object: aae91e5c9665b3104b90d055c8f2aadcdf574614 + last_write_checksum: sha1:7e95e077f70d016fdaa0256ac622d19e91e0d7cb + pristine_git_object: 861d9bf7b206b4da322b7facdcafd43e7805a1ec src/openrouter/components/privateendpointresponse.py: id: 38a49c864b72 last_write_checksum: sha1:e9cbd209c0e4128c69645f4b4fb59508b40bb6eb @@ -13120,12 +13120,12 @@ trackedFiles: pristine_git_object: 170ae25c582bb8decd74e1c69bfa8353bd44e86d src/openrouter/components/providername.py: id: fcc722fa2fce - last_write_checksum: sha1:69e6c0e392cc7cb962ef4ebd9a2657ba43903df3 - pristine_git_object: 943635547cc66baee2b23c54147b3561d0736bc7 + last_write_checksum: sha1:1a4ed56d5fb7b53c174a877892e39e7c37d17ddf + pristine_git_object: e30339f8a06f9986225d7c208620a7173c55dfca src/openrouter/components/provideroptions.py: id: 73dde6c8f359 - last_write_checksum: sha1:6faf10e9dfae0a48f948dc216a32b5a5b5c672b7 - pristine_git_object: 8c24186ffe46e9b1d996c88defa42a86c0da5aa8 + last_write_checksum: sha1:ad5aa56d30c0f16fc2ac862be06d275c6e70f3df + pristine_git_object: a8abf2047bec5dca52556bce8bdad1314686be9a src/openrouter/components/provideroverloadedresponseerrordata.py: id: 5b693682570e last_write_checksum: sha1:b54682560ff95dad18d26f9aaf887f8f6e0e1f71 @@ -13136,8 +13136,8 @@ trackedFiles: pristine_git_object: 6cf5d428899c8722a49aa4ed5918ffe95b793549 src/openrouter/components/providerresponse.py: id: ad3887be54c5 - last_write_checksum: sha1:e72d715a5e2008206fd047f352b9ad121a1adb67 - pristine_git_object: 08957bde360335933be5733214077ff82eeb21f7 + last_write_checksum: sha1:4b6331be21b8e180dd9fafe4abbfcb29b7f194d3 + pristine_git_object: 4f09c78bba4b9fe73f4a7fcc30e5b647330eaaf0 src/openrouter/components/providersort.py: id: 348e382bf494 last_write_checksum: sha1:57551507f95cd2e16ef995e1c13f859fd0726152 @@ -13832,8 +13832,8 @@ trackedFiles: pristine_git_object: b4a3db2fc4c7edf92a475be2952f01b5e2070205 src/openrouter/components/videogenerationrequest.py: id: 70e3c9ff288c - last_write_checksum: sha1:a8eef2d679f7afb4d5f9b6f79e6539fc151fbb2a - pristine_git_object: 9da5001f8bd7c28601452286b5b8935e3ad6771d + last_write_checksum: sha1:184edd3c9af56c96b7a03a6ccb5305244bd07628 + pristine_git_object: 96e0013aa28c702f8147d616c7b7cd355873b20a src/openrouter/components/videogenerationresponse.py: id: 541f1321b072 last_write_checksum: sha1:6ba68c4551af144f37be940f0222f434d156e275 @@ -14520,8 +14520,8 @@ trackedFiles: pristine_git_object: 6f60496e1a42385ab2253a36dfcd7f3698d5ae7a src/openrouter/operations/listbyokkeys.py: id: b6dd42b3e05f - last_write_checksum: sha1:ca22f9b331c15f871b42bf0521260b6c17768612 - pristine_git_object: 9bb008183ec04f35b43ced6ee61fcceb012386ab + last_write_checksum: sha1:c19b4eed29d55b38a7c14322e5a039a1d36ab8cc + pristine_git_object: ce40e5ff7f35b31fe99fee8934987db52d09eb58 src/openrouter/operations/listcontainerfiles.py: id: 7a30b9291c76 last_write_checksum: sha1:937c9fb30fd651d28793340285b3389518b26d96 @@ -14772,8 +14772,8 @@ trackedFiles: pristine_git_object: 559ca6ad194bd4f66bc3777d7edc040ccb041a7c src/openrouter/private_endpoints.py: id: fdbce8846ed0 - last_write_checksum: sha1:f24e5496b1b57429d578c6422aef9ecb3b204760 - pristine_git_object: a6e38e8ee4ad2b23724bc542f651ea1b0a2f5053 + last_write_checksum: sha1:6b011534aab484c622e489b9abfb1545b1a77416 + pristine_git_object: d0c3002830ff39926729be91f7dd122d394f58ff src/openrouter/providers.py: id: debc4c48f149 last_write_checksum: sha1:11dbc607825edee8dcc84b39ee8171e097c47acf @@ -19167,3 +19167,4 @@ examples: "500": application/json: {"error": {"code": 404, "message": "Intern not found"}} examplesVersion: 1.0.2 +releaseNotes: "## Python SDK Changes:\n* `open_router.alpha.decisions.create()`: `request.provider` **Changed**\n* `open_router.tts.create_speech()`: \n * `request.provider.options.recursive` **Added**\n* `open_router.stt.create_transcription()`: \n * `request.provider.options.recursive` **Added**\n* `open_router.batch.create_batches()`: \n * `request.provider.only[].union(ProviderName).enum(recursive)` **Added**\n* `open_router.byok.list()`: \n * `request.provider` **Changed**\n * `response.data[].provider.enum(recursive)` **Added**\n* `open_router.byok.create()`: \n * `request.provider.enum(recursive)` **Added**\n * `response.data.provider.enum(recursive)` **Added**\n* `open_router.byok.get()`: `response.data.provider.enum(recursive)` **Added**\n* `open_router.byok.update()`: `response.data.provider.enum(recursive)` **Added**\n* `open_router.chat.send()`: `request.provider` **Changed**\n* `open_router.embeddings.generate()`: `request.provider` **Changed**\n* `open_router.endpoints.list_zdr_endpoints()`: `response.data[].provider_name.enum(recursive)` **Added**\n* `open_router.endpoints.list()`: `response.data.endpoints[].provider_name.enum(recursive)` **Added**\n* `open_router.generations.get_generation()`: `response.data.provider_responses[].provider_name.enum(recursive)` **Added**\n* `open_router.images.generate()`: `request.provider` **Changed**\n* `open_router.presets.create_presets_chat_completions()`: `request.provider` **Changed**\n* `open_router.presets.create_presets_messages()`: `request.provider` **Changed**\n* `open_router.presets.create_presets_responses()`: `request.provider` **Changed**\n* `open_router.private_endpoints.create()`: `request.pricing` **Changed**\n* `open_router.private_endpoints.get()`: `response.data.pricing` **Changed**\n* `open_router.private_endpoints.update()`: `response.data.pricing` **Changed**\n* `open_router.private_endpoints.update_pricing()`: \n * `request.pricing` **Changed**\n * `response.data.pricing` **Changed**\n* `open_router.rerank.rerank()`: `request.provider` **Changed**\n* `open_router.responses.send()`: `request.provider` **Changed**\n* `open_router.beta.responses.send()`: `request.provider` **Changed**\n* `open_router.system_one.create()`: `request.provider` **Changed**\n* `open_router.video_generation.generate()`: \n * `request.provider.options.recursive` **Added**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 6e7ef90ed..f50e81b2d 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.3.72 + version: 1.3.73 additionalDependencies: dev: pytest: '>=8.3' diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 16a8c2bd7..e6232e988 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -6969,6 +6969,7 @@ components: - 'primeintellect' - 'quiver' - 'recraft' + - 'recursive' - 'reka' - 'relace' - 'respan' @@ -18818,6 +18819,7 @@ components: - 'Perplexity' - 'Phala' - 'Recraft' + - 'Recursive' - 'Reka' - 'Relace' - 'Respan' @@ -26340,6 +26342,8 @@ components: model_permaslug: 'openai/gpt-4o-2024-08-06' model_slug: 'openai/gpt-4o' pricing: + cache_read: '0.00000025' + cache_write: '0.000003125' completion: '0.00001' prompt: '0.0000025' provider_name: 'Azure' @@ -26496,9 +26500,21 @@ components: PrivateEndpointPricing: description: 'Negotiated per-token rates reported for requests routed to this endpoint.' example: + cache_read: '0.00000025' + cache_write: '0.000003125' completion: '0.00001' prompt: '0.0000025' properties: + cache_read: + description: 'USD per cache-read prompt token, as a decimal string. Omit it to bill cache reads at the provider pricing strategy''s default, which for most strategies is the prompt rate.' + example: '0.00000025' + pattern: '^\d+(\.\d+)?$' + type: 'string' + cache_write: + description: 'USD per cache-write prompt token, as a decimal string. Omit it to bill cache writes at the provider pricing strategy''s default.' + example: '0.000003125' + pattern: '^\d+(\.\d+)?$' + type: 'string' completion: description: 'USD per completion token, as a decimal string.' example: '0.00001' @@ -26741,6 +26757,7 @@ components: - 'Perplexity' - 'Phala' - 'Recraft' + - 'Recursive' - 'Reka' - 'Relace' - 'Respan' @@ -27107,6 +27124,9 @@ components: recursal: additionalProperties: {} type: 'object' + recursive: + additionalProperties: {} + type: 'object' reflection: additionalProperties: {} type: 'object' @@ -27527,6 +27547,7 @@ components: - 'Perplexity' - 'Phala' - 'Recraft' + - 'Recursive' - 'Reka' - 'Relace' - 'Respan' @@ -37081,6 +37102,7 @@ paths: - 'primeintellect' - 'quiver' - 'recraft' + - 'recursive' - 'reka' - 'relace' - 'respan' @@ -50230,7 +50252,7 @@ paths: - $ref: "#/components/parameters/AppCategories" /private-endpoints/{id}/pricing: put: - description: 'Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. [Management key](/docs/guides/overview/auth/management-api-keys) required.' + description: 'Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. The body replaces the whole pricing object: omitting `cache_read` or `cache_write` reverts that rate to the provider pricing strategy''s default, even if it was set before. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updatePrivateEndpointPricing' parameters: - description: 'Stable identifier of the private endpoint.' diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 7573f0f27..80a34c544 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:a74d093cb783cef559f268a64fd24e6abaf5af0fc2f47f34fdbff5160ff4621f - sourceBlobDigest: sha256:3ae8ecf6f055b72ac8eb8b5d1d52913ddef2fa1f7f5388da571886f08fbcd88b + sourceRevisionDigest: sha256:02b248752304d3dd5799839e4e77e5ef0d805a84b4dd5be0b07e01a7e06d1270 + sourceBlobDigest: sha256:627acb063a2687b443c1daef8c7aff53e2dc10707eaaa92fa633bd6715a1affa tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:a74d093cb783cef559f268a64fd24e6abaf5af0fc2f47f34fdbff5160ff4621f - sourceBlobDigest: sha256:3ae8ecf6f055b72ac8eb8b5d1d52913ddef2fa1f7f5388da571886f08fbcd88b + sourceRevisionDigest: sha256:02b248752304d3dd5799839e4e77e5ef0d805a84b4dd5be0b07e01a7e06d1270 + sourceBlobDigest: sha256:627acb063a2687b443c1daef8c7aff53e2dc10707eaaa92fa633bd6715a1affa codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:e390166b4fdc2149e0d9ea9ae4a0590d0465f083ae025c5efc4379430a6966b2 + codeSamplesRevisionDigest: sha256:f8a5f47700a61a9f86ac423c08d7f759f7a051b114f31d0d702adf9c4008eebd workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 347eb216d..98f519403 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -3489,4 +3489,14 @@ Based on: ### Generated - [python v1.3.72] . ### Releases -- [PyPI v1.3.72] https://pypi.org/project/openrouter/1.3.72 - . \ No newline at end of file +- [PyPI v1.3.72] https://pypi.org/project/openrouter/1.3.72 - . + +## 2026-10-21 18:19:40 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.3.73] . +### Releases +- [PyPI v1.3.73] https://pypi.org/project/openrouter/1.3.73 - . \ No newline at end of file diff --git a/docs/components/byokproviderslug.mdx b/docs/components/byokproviderslug.mdx index 5b1b92ee4..5ad5ae652 100644 --- a/docs/components/byokproviderslug.mdx +++ b/docs/components/byokproviderslug.mdx @@ -104,6 +104,7 @@ This is an open enum. Unrecognized values will not fail type checks. - `"primeintellect"` - `"quiver"` - `"recraft"` +- `"recursive"` - `"reka"` - `"relace"` - `"respan"` diff --git a/docs/components/createprivateendpointrequest.mdx b/docs/components/createprivateendpointrequest.mdx index 8cd673de2..1a71ebbb2 100644 --- a/docs/components/createprivateendpointrequest.mdx +++ b/docs/components/createprivateendpointrequest.mdx @@ -11,6 +11,6 @@ title: "CreatePrivateEndpointRequest" | `declared_region` | [OptionalNullable[components.CreatePrivateEndpointRequestDeclaredRegion]](../components/createprivateendpointrequestdeclaredregion.mdx) | ➖ | Attest where this deployment processes data. | us | | `declared_zdr` | *OptionalNullable[bool]* | ➖ | Attest that this deployment retains no prompt or completion data. | | | `model_permaslug` | *str* | ✅ | Permanent slug of the model this endpoint serves. | openai/gpt-4o-2024-08-06 | -| `pricing` | [Optional[components.PrivateEndpointPricing]](../components/privateendpointpricing.mdx) | ➖ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"completion": "0.00001",
"prompt": "0.0000025"
} | +| `pricing` | [Optional[components.PrivateEndpointPricing]](../components/privateendpointpricing.mdx) | ➖ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"cache_read": "0.00000025",
"cache_write": "0.000003125",
"completion": "0.00001",
"prompt": "0.0000025"
} | | `provider_slug` | *str* | ✅ | Slug of the upstream provider. | azure | | `upstream_model_id` | *str* | ✅ | Model or deployment identifier sent to the upstream provider. | gpt-4o-prod | \ No newline at end of file diff --git a/docs/components/imagegenerationproviderpreferencesoptions.mdx b/docs/components/imagegenerationproviderpreferencesoptions.mdx index bc821a8a5..e1a528a02 100644 --- a/docs/components/imagegenerationproviderpreferencesoptions.mdx +++ b/docs/components/imagegenerationproviderpreferencesoptions.mdx @@ -118,6 +118,7 @@ Provider-specific options keyed by provider slug. Only options for the matched p | `quiver` | Dict[str, *Any*] | ➖ | N/A | | `recraft` | Dict[str, *Any*] | ➖ | N/A | | `recursal` | Dict[str, *Any*] | ➖ | N/A | +| `recursive` | Dict[str, *Any*] | ➖ | N/A | | `reflection` | Dict[str, *Any*] | ➖ | N/A | | `reka` | Dict[str, *Any*] | ➖ | N/A | | `relace` | Dict[str, *Any*] | ➖ | N/A | diff --git a/docs/components/privateendpoint.mdx b/docs/components/privateendpoint.mdx index 926be8291..2e9974f41 100644 --- a/docs/components/privateendpoint.mdx +++ b/docs/components/privateendpoint.mdx @@ -13,7 +13,7 @@ title: "PrivateEndpoint" | `model_name` | *Nullable[str]* | ✅ | Display name of the model, or `null` when the model is no longer listed. | OpenAI: GPT-4o | | `model_permaslug` | *str* | ✅ | Permanent slug of the model this endpoint serves. | openai/gpt-4o-2024-08-06 | | `model_slug` | *Nullable[str]* | ✅ | Public model slug, or `null` when the model is no longer listed. | openai/gpt-4o | -| `pricing` | [components.PrivateEndpointPricing](../components/privateendpointpricing.mdx) | ✅ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"completion": "0.00001",
"prompt": "0.0000025"
} | +| `pricing` | [components.PrivateEndpointPricing](../components/privateendpointpricing.mdx) | ✅ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"cache_read": "0.00000025",
"cache_write": "0.000003125",
"completion": "0.00001",
"prompt": "0.0000025"
} | | `provider_name` | *str* | ✅ | Display name of the upstream provider. | Azure | | `provider_slug` | *Nullable[str]* | ✅ | Slug of the upstream provider, or `null` when the provider is no longer listed. | azure | | `status` | [components.PrivateEndpointStatus](../components/privateendpointstatus.mdx) | ✅ | Lifecycle state. `draft` endpoints are not routable until validated and activated; `disabled` endpoints are activated but temporarily not routable. | active | diff --git a/docs/components/privateendpointpricing.mdx b/docs/components/privateendpointpricing.mdx index 479c40072..84c4f25d2 100644 --- a/docs/components/privateendpointpricing.mdx +++ b/docs/components/privateendpointpricing.mdx @@ -7,7 +7,9 @@ Negotiated per-token rates reported for requests routed to this endpoint. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | -| `completion` | *str* | ✅ | USD per completion token, as a decimal string. | 0.00001 | -| `prompt` | *str* | ✅ | USD per prompt token, as a decimal string. | 0.0000025 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `cache_read` | *Optional[str]* | ➖ | USD per cache-read prompt token, as a decimal string. Omit it to bill cache reads at the provider pricing strategy's default, which for most strategies is the prompt rate. | 0.00000025 | +| `cache_write` | *Optional[str]* | ➖ | USD per cache-write prompt token, as a decimal string. Omit it to bill cache writes at the provider pricing strategy's default. | 0.000003125 | +| `completion` | *str* | ✅ | USD per completion token, as a decimal string. | 0.00001 | +| `prompt` | *str* | ✅ | USD per prompt token, as a decimal string. | 0.0000025 | \ No newline at end of file diff --git a/docs/components/privateendpointresponse.mdx b/docs/components/privateendpointresponse.mdx index f40498bbd..0f64d6f31 100644 --- a/docs/components/privateendpointresponse.mdx +++ b/docs/components/privateendpointresponse.mdx @@ -4,6 +4,6 @@ title: "PrivateEndpointResponse" ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `data` | [components.PrivateEndpoint](../components/privateendpoint.mdx) | ✅ | N/A | \{
"base_url": "https://contoso.openai.azure.com",
"declared_region": "us",
"declared_zdr": true,
"id": "5b1c4c4e-7d0a-4a8e-9f3a-2d6c1b0e8a11",
"model_name": "OpenAI: GPT-4o",
"model_permaslug": "openai/gpt-4o-2024-08-06",
"model_slug": "openai/gpt-4o",
"pricing": \{
"completion": "0.00001",
"prompt": "0.0000025"
},
"provider_name": "Azure",
"provider_slug": "azure",
"status": "active",
"upstream_model_id": "gpt-4o-prod"
} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data` | [components.PrivateEndpoint](../components/privateendpoint.mdx) | ✅ | N/A | \{
"base_url": "https://contoso.openai.azure.com",
"declared_region": "us",
"declared_zdr": true,
"id": "5b1c4c4e-7d0a-4a8e-9f3a-2d6c1b0e8a11",
"model_name": "OpenAI: GPT-4o",
"model_permaslug": "openai/gpt-4o-2024-08-06",
"model_slug": "openai/gpt-4o",
"pricing": \{
"cache_read": "0.00000025",
"cache_write": "0.000003125",
"completion": "0.00001",
"prompt": "0.0000025"
},
"provider_name": "Azure",
"provider_slug": "azure",
"status": "active",
"upstream_model_id": "gpt-4o-prod"
} | \ No newline at end of file diff --git a/docs/components/providername.mdx b/docs/components/providername.mdx index fd35d33a2..6dc6d4c77 100644 --- a/docs/components/providername.mdx +++ b/docs/components/providername.mdx @@ -101,6 +101,7 @@ This is an open enum. Unrecognized values will not fail type checks. - `"Perplexity"` - `"Phala"` - `"Recraft"` +- `"Recursive"` - `"Reka"` - `"Relace"` - `"Respan"` diff --git a/docs/components/provideroptions.mdx b/docs/components/provideroptions.mdx index c268e347c..31aede1b6 100644 --- a/docs/components/provideroptions.mdx +++ b/docs/components/provideroptions.mdx @@ -118,6 +118,7 @@ Provider-specific options keyed by provider slug. Only options for the matched p | `quiver` | Dict[str, *Any*] | ➖ | N/A | | `recraft` | Dict[str, *Any*] | ➖ | N/A | | `recursal` | Dict[str, *Any*] | ➖ | N/A | +| `recursive` | Dict[str, *Any*] | ➖ | N/A | | `reflection` | Dict[str, *Any*] | ➖ | N/A | | `reka` | Dict[str, *Any*] | ➖ | N/A | | `relace` | Dict[str, *Any*] | ➖ | N/A | diff --git a/docs/components/providerresponseprovidername.mdx b/docs/components/providerresponseprovidername.mdx index 0ebaa1032..3675176b9 100644 --- a/docs/components/providerresponseprovidername.mdx +++ b/docs/components/providerresponseprovidername.mdx @@ -131,6 +131,7 @@ This is an open enum. Unrecognized values will not fail type checks. - `"Perplexity"` - `"Phala"` - `"Recraft"` +- `"Recursive"` - `"Reka"` - `"Relace"` - `"Respan"` diff --git a/docs/components/updateprivateendpointpricingrequest.mdx b/docs/components/updateprivateendpointpricingrequest.mdx index 1f7652eaa..242da8f19 100644 --- a/docs/components/updateprivateendpointpricingrequest.mdx +++ b/docs/components/updateprivateendpointpricingrequest.mdx @@ -4,6 +4,6 @@ title: "UpdatePrivateEndpointPricingRequest" ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `pricing` | [components.PrivateEndpointPricing](../components/privateendpointpricing.mdx) | ✅ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"completion": "0.00001",
"prompt": "0.0000025"
} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `pricing` | [components.PrivateEndpointPricing](../components/privateendpointpricing.mdx) | ✅ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"cache_read": "0.00000025",
"cache_write": "0.000003125",
"completion": "0.00001",
"prompt": "0.0000025"
} | \ No newline at end of file diff --git a/docs/components/videogenerationrequestoptions.mdx b/docs/components/videogenerationrequestoptions.mdx index 03806935c..5bd82d369 100644 --- a/docs/components/videogenerationrequestoptions.mdx +++ b/docs/components/videogenerationrequestoptions.mdx @@ -118,6 +118,7 @@ Provider-specific options keyed by provider slug. Only options for the matched p | `quiver` | Dict[str, *Any*] | ➖ | N/A | | `recraft` | Dict[str, *Any*] | ➖ | N/A | | `recursal` | Dict[str, *Any*] | ➖ | N/A | +| `recursive` | Dict[str, *Any*] | ➖ | N/A | | `reflection` | Dict[str, *Any*] | ➖ | N/A | | `reka` | Dict[str, *Any*] | ➖ | N/A | | `relace` | Dict[str, *Any*] | ➖ | N/A | diff --git a/docs/operations/provider.mdx b/docs/operations/provider.mdx index ee07ed6dc..0a8cad96c 100644 --- a/docs/operations/provider.mdx +++ b/docs/operations/provider.mdx @@ -104,6 +104,7 @@ This is an open enum. Unrecognized values will not fail type checks. - `"primeintellect"` - `"quiver"` - `"recraft"` +- `"recursive"` - `"reka"` - `"relace"` - `"respan"` diff --git a/docs/sdks/privateendpoints/README.mdx b/docs/sdks/privateendpoints/README.mdx index c36065eb1..abee0df37 100644 --- a/docs/sdks/privateendpoints/README.mdx +++ b/docs/sdks/privateendpoints/README.mdx @@ -108,7 +108,7 @@ with OpenRouter( | `base_url` | *Optional[str]* | ➖ | HTTPS base URL of your deployment. Required unless the provider derives its URL from the BYOK credential (Azure, Amazon Bedrock, Google Vertex). | https://contoso.openai.azure.com | | `declared_region` | [OptionalNullable[components.CreatePrivateEndpointRequestDeclaredRegion]](../../components/createprivateendpointrequestdeclaredregion.mdx) | ➖ | Attest where this deployment processes data. | us | | `declared_zdr` | *OptionalNullable[bool]* | ➖ | Attest that this deployment retains no prompt or completion data. | | -| `pricing` | [Optional[components.PrivateEndpointPricing]](../../components/privateendpointpricing.mdx) | ➖ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"completion": "0.00001",
"prompt": "0.0000025"
} | +| `pricing` | [Optional[components.PrivateEndpointPricing]](../../components/privateendpointpricing.mdx) | ➖ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"cache_read": "0.00000025",
"cache_write": "0.000003125",
"completion": "0.00001",
"prompt": "0.0000025"
} | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | | ### Response @@ -462,7 +462,7 @@ with OpenRouter( ## update_pricing -Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. [Management key](/docs/guides/overview/auth/management-api-keys) required. +Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. The body replaces the whole pricing object: omitting `cache_read` or `cache_write` reverts that rate to the provider pricing strategy's default, even if it was set before. [Management key](/docs/guides/overview/auth/management-api-keys) required. ### Example Usage @@ -493,7 +493,7 @@ with OpenRouter( | Parameter | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | *str* | ✅ | Stable identifier of the private endpoint. | 5b1c4c4e-7d0a-4a8e-9f3a-2d6c1b0e8a11 | -| `pricing` | [components.PrivateEndpointPricing](../../components/privateendpointpricing.mdx) | ✅ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"completion": "0.00001",
"prompt": "0.0000025"
} | +| `pricing` | [components.PrivateEndpointPricing](../../components/privateendpointpricing.mdx) | ✅ | Negotiated per-token rates reported for requests routed to this endpoint. | \{
"cache_read": "0.00000025",
"cache_write": "0.000003125",
"completion": "0.00001",
"prompt": "0.0000025"
} | | `http_referer` | *Optional[str]* | ➖ | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| | | `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | | `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | diff --git a/pyproject.toml b/pyproject.toml index 7f0246bd4..be6cea480 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.3.72" +version = "1.3.73" 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 a966ba4b6..3a87fcf4b 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "1.3.72" +__version__: str = "1.3.73" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.3.72 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.3.73 2.914.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/byokproviderslug.py b/src/openrouter/components/byokproviderslug.py index 66f4760c7..495fe846d 100644 --- a/src/openrouter/components/byokproviderslug.py +++ b/src/openrouter/components/byokproviderslug.py @@ -93,6 +93,7 @@ "primeintellect", "quiver", "recraft", + "recursive", "reka", "relace", "respan", diff --git a/src/openrouter/components/imagegenerationproviderpreferences.py b/src/openrouter/components/imagegenerationproviderpreferences.py index 30efd6780..791eb9400 100644 --- a/src/openrouter/components/imagegenerationproviderpreferences.py +++ b/src/openrouter/components/imagegenerationproviderpreferences.py @@ -149,6 +149,7 @@ class ImageGenerationProviderPreferencesOptionsTypedDict(TypedDict): quiver: NotRequired[Dict[str, Any]] recraft: NotRequired[Dict[str, Any]] recursal: NotRequired[Dict[str, Any]] + recursive: NotRequired[Dict[str, Any]] reflection: NotRequired[Dict[str, Any]] reka: NotRequired[Dict[str, Any]] relace: NotRequired[Dict[str, Any]] @@ -450,6 +451,8 @@ class ImageGenerationProviderPreferencesOptions(BaseModel): recursal: Optional[Dict[str, Any]] = None + recursive: Optional[Dict[str, Any]] = None + reflection: Optional[Dict[str, Any]] = None reka: Optional[Dict[str, Any]] = None @@ -651,6 +654,7 @@ def serialize_model(self, handler): "quiver", "recraft", "recursal", + "recursive", "reflection", "reka", "relace", diff --git a/src/openrouter/components/privateendpointpricing.py b/src/openrouter/components/privateendpointpricing.py index aae91e5c9..861d9bf7b 100644 --- a/src/openrouter/components/privateendpointpricing.py +++ b/src/openrouter/components/privateendpointpricing.py @@ -1,8 +1,10 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from openrouter.types import BaseModel -from typing_extensions import TypedDict +from openrouter.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict class PrivateEndpointPricingTypedDict(TypedDict): @@ -12,6 +14,10 @@ class PrivateEndpointPricingTypedDict(TypedDict): r"""USD per completion token, as a decimal string.""" prompt: str r"""USD per prompt token, as a decimal string.""" + cache_read: NotRequired[str] + r"""USD per cache-read prompt token, as a decimal string. Omit it to bill cache reads at the provider pricing strategy's default, which for most strategies is the prompt rate.""" + cache_write: NotRequired[str] + r"""USD per cache-write prompt token, as a decimal string. Omit it to bill cache writes at the provider pricing strategy's default.""" class PrivateEndpointPricing(BaseModel): @@ -22,3 +28,25 @@ class PrivateEndpointPricing(BaseModel): prompt: str r"""USD per prompt token, as a decimal string.""" + + cache_read: Optional[str] = None + r"""USD per cache-read prompt token, as a decimal string. Omit it to bill cache reads at the provider pricing strategy's default, which for most strategies is the prompt rate.""" + + cache_write: Optional[str] = None + r"""USD per cache-write prompt token, as a decimal string. Omit it to bill cache writes at the provider pricing strategy's default.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["cache_read", "cache_write"]) + 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/providername.py b/src/openrouter/components/providername.py index 943635547..e30339f8a 100644 --- a/src/openrouter/components/providername.py +++ b/src/openrouter/components/providername.py @@ -92,6 +92,7 @@ "Perplexity", "Phala", "Recraft", + "Recursive", "Reka", "Relace", "Respan", diff --git a/src/openrouter/components/provideroptions.py b/src/openrouter/components/provideroptions.py index 8c24186ff..a8abf2047 100644 --- a/src/openrouter/components/provideroptions.py +++ b/src/openrouter/components/provideroptions.py @@ -120,6 +120,7 @@ class ProviderOptionsTypedDict(TypedDict): quiver: NotRequired[Dict[str, Any]] recraft: NotRequired[Dict[str, Any]] recursal: NotRequired[Dict[str, Any]] + recursive: NotRequired[Dict[str, Any]] reflection: NotRequired[Dict[str, Any]] reka: NotRequired[Dict[str, Any]] relace: NotRequired[Dict[str, Any]] @@ -421,6 +422,8 @@ class ProviderOptions(BaseModel): recursal: Optional[Dict[str, Any]] = None + recursive: Optional[Dict[str, Any]] = None + reflection: Optional[Dict[str, Any]] = None reka: Optional[Dict[str, Any]] = None @@ -622,6 +625,7 @@ def serialize_model(self, handler): "quiver", "recraft", "recursal", + "recursive", "reflection", "reka", "relace", diff --git a/src/openrouter/components/providerresponse.py b/src/openrouter/components/providerresponse.py index 08957bde3..4f09c78bb 100644 --- a/src/openrouter/components/providerresponse.py +++ b/src/openrouter/components/providerresponse.py @@ -122,6 +122,7 @@ "Perplexity", "Phala", "Recraft", + "Recursive", "Reka", "Relace", "Respan", diff --git a/src/openrouter/components/videogenerationrequest.py b/src/openrouter/components/videogenerationrequest.py index 9da5001f8..96e0013aa 100644 --- a/src/openrouter/components/videogenerationrequest.py +++ b/src/openrouter/components/videogenerationrequest.py @@ -140,6 +140,7 @@ class VideoGenerationRequestOptionsTypedDict(TypedDict): quiver: NotRequired[Dict[str, Any]] recraft: NotRequired[Dict[str, Any]] recursal: NotRequired[Dict[str, Any]] + recursive: NotRequired[Dict[str, Any]] reflection: NotRequired[Dict[str, Any]] reka: NotRequired[Dict[str, Any]] relace: NotRequired[Dict[str, Any]] @@ -441,6 +442,8 @@ class VideoGenerationRequestOptions(BaseModel): recursal: Optional[Dict[str, Any]] = None + recursive: Optional[Dict[str, Any]] = None + reflection: Optional[Dict[str, Any]] = None reka: Optional[Dict[str, Any]] = None @@ -642,6 +645,7 @@ def serialize_model(self, handler): "quiver", "recraft", "recursal", + "recursive", "reflection", "reka", "relace", diff --git a/src/openrouter/operations/listbyokkeys.py b/src/openrouter/operations/listbyokkeys.py index 9bb008183..ce40e5ff7 100644 --- a/src/openrouter/operations/listbyokkeys.py +++ b/src/openrouter/operations/listbyokkeys.py @@ -170,6 +170,7 @@ def serialize_model(self, handler): "primeintellect", "quiver", "recraft", + "recursive", "reka", "relace", "respan", diff --git a/src/openrouter/private_endpoints.py b/src/openrouter/private_endpoints.py index a6e38e8ee..d0c300283 100644 --- a/src/openrouter/private_endpoints.py +++ b/src/openrouter/private_endpoints.py @@ -2624,7 +2624,7 @@ def update_pricing( ) -> components.PrivateEndpointResponse: r"""Set private endpoint pricing - Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. [Management key](/docs/guides/overview/auth/management-api-keys) required. + Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. The body replaces the whole pricing object: omitting `cache_read` or `cache_write` reverts that rate to the provider pricing strategy's default, even if it was set before. [Management key](/docs/guides/overview/auth/management-api-keys) required. :param id: Stable identifier of the private endpoint. :param pricing: Negotiated per-token rates reported for requests routed to this endpoint. @@ -2799,7 +2799,7 @@ async def update_pricing_async( ) -> components.PrivateEndpointResponse: r"""Set private endpoint pricing - Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. [Management key](/docs/guides/overview/auth/management-api-keys) required. + Set the negotiated per-token rates reported for requests routed to this endpoint. Applies to drafts and active endpoints; new rates take effect for subsequent requests. The body replaces the whole pricing object: omitting `cache_read` or `cache_write` reverts that rate to the provider pricing strategy's default, even if it was set before. [Management key](/docs/guides/overview/auth/management-api-keys) required. :param id: Stable identifier of the private endpoint. :param pricing: Negotiated per-token rates reported for requests routed to this endpoint. diff --git a/uv.lock b/uv.lock index 6dfbaad80..3d7ae047f 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.12'", @@ -84,7 +84,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -231,7 +231,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.3.72" +version = "1.3.73" source = { editable = "." } dependencies = [ { name = "httpcore" },